我正在尝试执行一个调用另一个类的模板静态方法的模板方法,但是我遇到了一些编译错误。最小情况如下。

如果我编译下面的代码

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 时,编译通过,因此函数的模板参数似乎存在一些解析问题。像其他情况一样,我认为它需要一些 usingtypename hack 才能使其工作。

最佳答案

您需要指定依赖名称 bar 是模板:

return D::template bar<E>() + 1;
//        ^^^^^^^^



有关 typenametemplate 关键字的更多信息,请参阅 this question

关于c++ - 从模板函数调用静态模板方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33609611/

10-11 23:00
查看更多