c ++: передача const int в функцию шаблона - PullRequest
1 голос
/ 23 сентября 2011

Я использую rapidxml lib. Он определяет функцию для разбора файлов следующим образом:

template<int Flags>
void parse(Ch *text)

Библиотека предоставляет const int флагов, например:

const int parse_declaration_node = 0x20;

Итак, я создал указатель на статическое целое в моем классе:

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 ]

7 голосов
/ 23 сентября 2011

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

Ваш шаблон принимает int в качестве параметра шаблона, но вы передаете ему int*.Типы int и int* не совпадают.

Попробуйте tree->parse<rapidxml::parse_declaration_node>(file->data());

1 голос
/ 23 сентября 2011

Нельзя использовать переменную для значения параметра шаблона.

Вместо этого вы можете добавить параметр шаблона Flags в ваш класс

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

И установить параметр Flags для экземпляра класса

CClass<rapidxml::parse_declaration_node> obj;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...