c ++:将const int传递给模板函数

Plo*_*uff 1 c++ templates const

我正在使用rapidxml lib.它定义了一个以这种方式解析文件的函数:

template<int Flags>
void parse(Ch *text)
Run Code Online (Sandbox Code Playgroud)

lib提供了const int标志,例如:

const int parse_declaration_node = 0x20;
Run Code Online (Sandbox Code Playgroud)

所以我在我的类中创建了一个指向静态int的指针:

const int * parser_mode;
Run Code Online (Sandbox Code Playgroud)

在类构造函数中,我为它赋值:

parser_mode = &rapidxml::parse_declaration_node;
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试将此const int *作为模板参数用于解析函数时:

tree->parse<parser_mode>(file->data());
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

错误:'GpxSectionData :: parser_mode'不能出现在常量表达式中

这句话的其余部分似乎是正确的,因为:

tree->parse<0>(file->data());
Run Code Online (Sandbox Code Playgroud)

不会产生编译错误......

你能告诉我我在这里失踪了吗?谢谢!


感谢下面的解释,我可能会在课堂上定义:所以我认为这是:

class Myclass {
static const int parser_mode;
[...]
}
static const int Myclass::parser_mode = rapidxml::parse_declaration_node;
Run Code Online (Sandbox Code Playgroud)

Rob*_*obᵩ 7

template<int Flags> void parse(Ch *text) ... const int * parser_mode;

您的模板采用int模板参数,但您传递的是模板参数int*.类型intint*不一样.

尝试 tree->parse<rapidxml::parse_declaration_node>(file->data());

  • 还要注意,即使`*parser_mode`也不是编译时常量表达式,所以他必须使用全名(如你所示)或实例化`static const int parser_mode = rapidxml :: parse_declaration_node;`在构造函数之外 (4认同)