2010-10-26 85 views
6

我宣佈了一些選項,由命令行參數或通過讀取輸入文件來填充一個結構:如何獲取結構中元素的數量?

struct options { 
    int val1; 
    int val2; 
    bool val3; 
} 

現在我要檢查在程序執行正確數量的參數。當然有一個

const int optionsSize = 3; 

會做。但是有沒有適應性的方法?如果我在結構中添加另一個值,並且不記得增加整數?

回答

10

爲什麼不將指定的選項添加到std::vector<string> options中並使用options.size()方法檢查正確的數字。然後將它們轉換爲適當的數據類型。

一個做這種事情的更健壯的方式是使用Boost Program Options

+0

謝謝你給的解決方案與通過升壓指出的替代品! – Gunnar 2010-10-27 14:18:52

1

沒有辦法計算語言裏面這個數字。基本上你唯一的選擇是編寫一個腳本來查看源代碼。如果結構中的所有元素具有相同的類型,則可以使用sizeof(thestruct)/sizeof(commontype)

0

我不知道有什麼方法在運行時確定結構中成員的數量。你有兩個選擇:

  1. 使用升壓融合序列,但是這是矯枉過正
  2. 使用升壓program_options,在這裏,每個選項我相信你可以指定是否應該是強制性的還是沒有。這會自動檢查你(解析命令行時)。所以你需要記住要做的就是將struct成員添加到program_options的一組選項中。在文檔中有很多示例,詢問您是否有任何問題...
4

這需要反射,C++沒有。

因此,在您的情況下,解析命令行,檢查語法錯誤並在您的結構中設置所請求的值的代碼也必須檢查是否設置了足夠的值。

1

「如果我在結構中添加另一個值,並且不記得增加整數,該怎麼辦?

然後單元測試是相當不足,如果它沒有檢測到。

乾杯&心連心,