从模板函数调用静态模板方法

Calling a static template method from a template function

本文关键字:静态 模板方法 函数调用      更新时间:2023-10-16

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

如果我编译下面的代码

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替换D::bar<E>时,编译通过了,所以函数的模板参数似乎存在一些解析问题。和其他情况一样,我认为它需要一些usingtypename破解才能工作。

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

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

实时演示

有关typenametemplate关键字的更多信息,请参阅此问题。