这不编译:
template<class X> struct A {
template<int I> void f() {}
};
template<class T> void g()
{
A<T> a;
a.f<3>(); // Compilation fails here (Line 18)
}
int main(int argc, char *argv[])
{
g<int>(); // Line 23
}
Run Code Online (Sandbox Code Playgroud)
编译器(gcc)说:
hhh.cpp:在函数'void g()'中:
hhh.cpp:18:错误:')'令牌之前的预期primary-expression
hhh.cpp:在函数'void g()[with T = int]'中:
hhh.cpp:23:从这里实例化
hhh.cpp:18:错误:无效使用成员(你忘了'&'?)
谁能解释为什么会这样?有没有办法让它发挥作用?
我正在写上型模板(或者C++函数float或double),并使用Eigen::Matrix内部.该函数将被使用的组合float,double和模板类型Eigen:Matrix的对象. Eigen::Matrix<>::cast()作品只是罚款double和float,虽然我与模板类型使用时打一个奇怪的问题.见下面的代码:
#include "Eigen/Core" // Version 3.2.4 (eigen-eigen-10219c95fe65)
template <typename Scalar>
void Foo() {
Eigen::Matrix<double, 3, 1> mat_d = Eigen::Matrix<double, 3, 1>::Zero();
Eigen::Matrix<float, 3, 1> mat_f = Eigen::Matrix<float, 3, 1>::Zero();
Eigen::Matrix<Scalar, 3, 1> mat_s = Eigen::Matrix<Scalar, 3, 1>::Zero();
mat_d = mat_f.cast<double>(); // Works
mat_f = mat_f.cast<float>(); // Works
mat_s = mat_f.cast<Scalar>(); // Works
mat_s = mat_d.cast<Scalar>(); // Works
mat_d = mat_s.cast<double>(); // Broken …Run Code Online (Sandbox Code Playgroud)