我试图做一个调用另一个类的模板静态方法的模板方法,但是我得到了一些编译错误。最小的情况如下。
如果我编译下面的代码
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
黑客来使其发挥作用。
答案 0 :(得分:5)
您需要指定从属名称bar
是模板:
return D::template bar<E>() + 1;
// ^^^^^^^^
有关typename
和template
关键字的详情,请参阅this question。