我正在尝试执行一个调用另一个类的模板静态方法的模板方法,但是我遇到了一些编译错误。最小情况如下。
如果我编译下面的代码
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
hack 才能使其工作。 最佳答案
您需要指定依赖名称 bar
是模板:
return D::template bar<E>() + 1;
// ^^^^^^^^
有关
typename
和 template
关键字的更多信息,请参阅 this question。关于c++ - 从模板函数调用静态模板方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33609611/