具有特征模板的类模板

时间:2016-12-05 10:28:26

标签: templates eigen eigen3

我想创建一个包含动态大小的Eigen成员的简单模板类。我一直收到隐式实例化的错误。无论如何,我想要做的是这样的:

template <class T>
class MyTemplateClass
{
public:
    MyTemplateClass(DenseBase<Derived>& eigenObject);
private:
    SomeSortOfTypeHereForDynamicAllocation eigenMember;
}

MyTemplateClass<T>::MyTemplateClass(DenseBase<T>& eigenObject)
{
     eigenMember = eigenObject;
}

1 个答案:

答案 0 :(得分:0)

在模板化类中声明模板化成员函数(或构造函数)时,需要添加另一个template构造,如下所示:

// ...
public:
    template<class Derived>
    MyTemplateClass(DenseBase<Derived>& eigenObject);
// ...

如果您以后想要实现它,则需要在单独的template<>中编写两个模板列表:

template<class T>       // template(s) for actual class
template<class Derived> // template(s) for method
MyTemplateClass<T>::MyTemplateClass(DenseBase<Derived>& eigenObject)
  : eigenMember(eigenObject) // Note: it is usually better to initialize members using the initializer list
{
    // rest of constructor is empty
}