我之前的问题(具有 const 变量的类的编程模型)得到了完美的答案,但现在我有了一个新的要求,答案似乎不再有效。
假设我有一个包含几个 const 变量的类:
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
}
};
这完美地解决了我的问题,但是现在,如果我有一系列来自 Base 的派生类具有不同数量和类型的常量,并且我想使用相同的帮助程序(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
我无法解决这个问题,我可能正在寻找一些替代解决方案。c++