相关疑难解决方法(0)

从模板函数调用的模板类的模板成员函数

这不编译:

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++ templates

45
推荐指数
1
解决办法
2万
查看次数

通过模板发出C++ Eigen :: Matrix类型的问题

我正在写上型模板(或者C++函数floatdouble),并使用Eigen::Matrix内部.该函数将被使用的组合float,double和模板类型Eigen:Matrix的对象. Eigen::Matrix<>::cast()作品只是罚款doublefloat,虽然我与模板类型使用时打一个奇怪的问题.见下面的代码:

#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)

c++ templates eigen eigen3

5
推荐指数
1
解决办法
2171
查看次数

标签 统计

c++ ×2

templates ×2

eigen ×1

eigen3 ×1