Вызов статического метода шаблона из функции шаблона
85
3
Я пытаюсь сделать метод шаблона, который вызывает статический метод шаблона другого класса, но я получаю некоторые компиляционные ошибки. Минимальный случай следующий.
Если я скомпилирую код ниже
template<class E, class D>
int foo() {
return D::bar<E>() + 1;
}
он выдает следующий вывод
g++ -std=c++11 test.cpp -c
test.cpp: In function ‘int foo()’:
test.cpp:4:18: error: expected primary-expression before ‘>’ token
return D::bar<E>() + 1;
^
test.cpp:4:20: error: expected primary-expression before ‘)’ token
return D::bar<E>() + 1;
Когда я заменяю D::bar<E>
на D::bar
, компиляция проходит так. Кажется, есть некоторая проблема синтаксического анализа с аргументом шаблона функции. Как и в других случаях, мне кажется, что для этого нужно немного using
или typename
.
спросил(а)
2015-11-09T15:57:00+03:00
5 лет, 3 месяца назад
добавить комментарий
пожаловаться
Решение
106
Вам нужно указать, что зависимым именем bar
является шаблон:
return D::template bar<E>() + 1;
// ^^^^^^^^
Подробнее о ключевых словах typename
и template
см. этот вопрос.
ответил(а)
2015-11-09T15:59:00+03:00
5 лет, 3 месяца назад
добавить комментарий
пожаловаться
Ваш ответ