从模板函数调用静态模板方法
Calling a static template method from a template function
我正在尝试创建一个模板方法,该方法调用另一个类的模板静态方法,但我遇到了一些编译错误。最小情况如下。
如果我编译下面的代码
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>
时,编译通过了,所以函数的模板参数似乎存在一些解析问题。和其他情况一样,我认为它需要一些using
或typename
破解才能工作。
您需要指定依赖名称bar
是一个模板:
return D::template bar<E>() + 1;
// ^^^^^^^^
实时演示
有关typename
和template
关键字的更多信息,请参阅此问题。
相关文章:
- 将成员函数指针作为参数传递给模板方法
- 在派生类中绑定非静态模板化成员函数
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- C++11:模板方法的模板函数调用无法编译?
- 如何模板静态工厂方法?
- 从部分专用模板方法调用模板非静态方法
- 不满足需要静态模板方法的模板模板概念的约束
- Dll和非模板类中模板方法中的静态变量
- 用于命名模板静态类方法的特定实例的语法
- decltype和静态模板方法
- 从基类的静态模板方法中调用继承类的受保护 ctor 失败
- 如何为静态模板方法设置别名
- 从模板函数调用静态模板方法
- c++静态结构模板方法返回枚举类型
- 如何将C++模板方法的返回类型声明为其他类中的静态方法
- 是否可以将调用站点上对象的静态类型用作其模板方法的自动推导的模板参数
- 如何初始化模板方法中使用的静态类成员
- c++静态库中的模板方法
- 方法中使用的静态模板成员数组sizeof
- 重载可以区分非静态成员方法和其他函数的模板函数