我宣佈了一些選項,由命令行參數或通過讀取輸入文件來填充一個結構:如何獲取結構中元素的數量?
struct options {
int val1;
int val2;
bool val3;
}
現在我要檢查在程序執行正確數量的參數。當然有一個
const int optionsSize = 3;
會做。但是有沒有適應性的方法?如果我在結構中添加另一個值,並且不記得增加整數?
我宣佈了一些選項,由命令行參數或通過讀取輸入文件來填充一個結構:如何獲取結構中元素的數量?
struct options {
int val1;
int val2;
bool val3;
}
現在我要檢查在程序執行正確數量的參數。當然有一個
const int optionsSize = 3;
會做。但是有沒有適應性的方法?如果我在結構中添加另一個值,並且不記得增加整數?
爲什麼不將指定的選項添加到std::vector<string> options
中並使用options.size()
方法檢查正確的數字。然後將它們轉換爲適當的數據類型。
一個做這種事情的更健壯的方式是使用Boost Program Options
沒有辦法計算語言裏面這個數字。基本上你唯一的選擇是編寫一個腳本來查看源代碼。如果結構中的所有元素具有相同的類型,則可以使用sizeof(thestruct)/sizeof(commontype)
。
我不知道有什麼方法在運行時確定結構中成員的數量。你有兩個選擇:
這需要反射,C++沒有。
因此,在您的情況下,解析命令行,檢查語法錯誤並在您的結構中設置所請求的值的代碼也必須檢查是否設置了足夠的值。
「如果我在結構中添加另一個值,並且不記得增加整數,該怎麼辦?
然後單元測試是相當不足,如果它沒有檢測到。
乾杯&心連心,
謝謝你給的解決方案與通過升壓指出的替代品! – Gunnar 2010-10-27 14:18:52