c++:将 const int 传递给模板函数
我正在使用rapidxml 库。 它定义了一个以这种方式解析文件的函数:
template<int Flags>
void parse(Ch *text)
例如,lib 提供了 const int 标志:
const int parse_declaration_node = 0x20;
因此,我在类中创建了一个指向 static int 的指针:
const int * parser_mode;
在类构造函数中,我为其分配了值:
parser_mode = &rapidxml::parse_declaration_node;
然后,当我尝试使用此 const int *
作为解析函数的模板参数时:
tree->parse<parser_mode>(file->data());
我收到以下错误消息:
错误:“GpxSectionData::parser_mode”不能出现在 常量表达式
语句的其余部分似乎是正确的,因为:
tree->parse<0>(file->data());
不会产生编译错误...
您能告诉我这里缺少什么吗? 谢谢你!
感谢下面的解释,我可能会在课堂上定义它: 所以我认为这是:
class Myclass {
static const int parser_mode;
[...]
}
static const int Myclass::parser_mode = rapidxml::parse_declaration_node;
I am using the rapidxml lib.
It defines a function to parse files in this way:
template<int Flags>
void parse(Ch *text)
The lib provides const int
flags for example:
const int parse_declaration_node = 0x20;
So I created a pointer to a static int in my class:
const int * parser_mode;
And in the class constructor I assigned it its value:
parser_mode = &rapidxml::parse_declaration_node;
Then when I try to use this const int *
as template argument to the parse function:
tree->parse<parser_mode>(file->data());
I get this error message:
error: ‘GpxSectionData::parser_mode’ cannot appear in a
constant-expression
This rest of the statement seems correct since:
tree->parse<0>(file->data());
doesn't produce compilation error...
Could you please tell me what I am missing here?
Thank you!
Thanks to the explanations below I will probably define it out of the class:
So I think this is:
class Myclass {
static const int parser_mode;
[...]
}
static const int Myclass::parser_mode = rapidxml::parse_declaration_node;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
模板void parse(Ch *text)
...const int * parser_mode;
您的模板采用
int
作为模板参数,但您向其传递一个 <代码>int*。int
和int*
类型不同。尝试
tree->parse(file->data());
template<int Flags> void parse(Ch *text)
...const int * parser_mode;
Your template takes an
int
as a template parameter, but you are passing it anint*
. The typesint
andint*
are not the same.Try
tree->parse<rapidxml::parse_declaration_node>(file->data());
您不能使用变量作为模板参数的值。
相反,您可以将 Flags 模板参数添加到您的类中
并为类实例设置 Flags 参数
You cannot use variable for value of template parameter.
Instead you can add Flags template parameter to your class
And set Flags parameter for class instance