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

时间:2011-09-22 20:48:29

标签: c++ templates const

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

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());

我收到此错误消息:

  

错误:'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;

2 个答案:

答案 0 :(得分:7)

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

您的模板将int作为模板参数,但您传递的是int*intint*类型不一样。

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

答案 1 :(得分:1)

您不能将变量用于模板参数的值。

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

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

并为类实例设置Flags参数

CClass<rapidxml::parse_declaration_node> obj;