我之前的問題(Programming model for classes with const variables)收到了一個完美的答案,但現在我有了一個新的要求,答案似乎不再適用。具有可變數量和類型的常量變量的類的編程模型
說我有包含幾個常量變量的類:
class Base
{
protected:
const int a, b;
public:
Base(string file);
};
常量需要初始化列表中進行初始化,也需要提前一些其他的方法來計算值。
答案是使用一個輔助類:
class FileParser
{
public:
FileParser (const string& file)
{
Parse (file);
}
int GetA() const { return mA; }
int GetB() const { return mB; }
private:
int mA;
int mB;
void Parse (const string& file)
{
// MAGIC HAPPENS!
// Parse the file, compute mA and mB, then return
}
};
這完全解決了我的問題,但現在,怎麼樣,如果我有一個從基礎的一系列派生類的具有不同數量和類型的常量,並且我想使用相同的幫助程序(FileParser)?我不能使用boost C++,但我有C++ 11。我嘗試使用可變參數的模板來返回可變長度的元組,但它看起來並不重要。以下是修改後的輔助類我想:
template <typename ... Types>
class LineParser
{
private:
std::tuple<Types...> _t;
public:
LineParser(const std::string & line)
{
// local variables
std::stringstream ss;
// parse the line
ss.str(line);
for (int i=0; i<sizeof...(Types); i++)
{
ss>>std::get<i>(_t);
}
}
};
它失敗,編譯:
error: the value of ‘i’ is not usable in a constant expression
我解決不了這個問題,我可能會尋找一些替代solutions.C++
嘿,謝謝你的道具。 :) –
您不能使用元組來訪問元組元素。它在編譯時完成。可能是這個鏈接對你有幫助:http://stackoverflow.com/questions/18251815/creating-an-array-initializer-from-a-tuple-or-variadic-template-parameters –