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

发布于 2024-12-05 18:54:13 字数 987 浏览 0 评论 0原文

我正在使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

明月松间行 2024-12-12 18:54:13

模板void parse(Ch *text) ... const int * parser_mode;

您的模板采用 int 作为模板参数,但您向其传递一个 <代码>int*。 intint* 类型不同。

尝试 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 an int*. The types int and int* are not the same.

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

触ぅ动初心 2024-12-12 18:54:13

您不能使用变量作为模板参数的值。

相反,您可以将 Flags 模板参数添加到您的类中

template<int Flags>
class CClass {
    //...
};

并为类实例设置 Flags 参数

CClass<rapidxml::parse_declaration_node> obj;

You cannot use variable for value of template parameter.

Instead you can add Flags template parameter to your class

template<int Flags>
class CClass {
    //...
};

And set Flags parameter for class instance

CClass<rapidxml::parse_declaration_node> obj;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文