我正在使用rapidxml库。 它定义一个函数以这种方式来解析文件:C++:将const int传递给模板函数
template<int Flags>
void parse(Ch *text)
的LIB提供例如const int
标志:
const int parse_declaration_node = 0x20;
所以我在类中创建一个指向静态INT:
const int * parser_mode;
而在类构造函数中,我将它赋值为:
parser_mode = &rapidxml::parse_declaration_node;
然后,当我尝试使用此const int *
作为模板参数解析功能:
tree->parse<parser_mode>(file->data());
我收到此错误信息:
error: ‘GpxSectionData::parser_mode’ cannot appear in a constant-expression
声明此休息似乎是正确的,因为:
tree->parse<0>(file->data());
不会产生编译错误...
你能告诉我我在这里失踪了吗? 谢谢!
多亏了我下面的解释可能会定义它的类: 所以我觉得是这样的:
class Myclass {
static const int parser_mode;
[...]
}
static const int Myclass::parser_mode = rapidxml::parse_declaration_node;
还要注意的是,即使'* parser_mode'是不是编译时间常数表达式,所以他必须使用全名(如你演示)或者在构造函数 –
之外实例化'static const int parser_mode = rapidxml :: parse_declaration_node;'好吧。如果我说模板参数需要在编译期间解决,我是否正确理解了这个问题?所以,即使我的'parser_mode'指向一个'const int',由于指针本身将在运行时定义,该对象不能被构建?所以,即使我使用'const int * const parser_mode',这在编译期间会失败吗? – Plouff
@Rob:顺便说一句,我也意识到,尝试'parsermode'而不是'* parser_mode'是愚蠢的。带*号的错误信息更令人困惑,而且让我感到困惑。当你学习C++时,指针需要一点练习!谢谢你的解释。 – Plouff