2016-12-05 96 views
0

我想制作一个简单的模板类,它包含具有动态大小的特征成员。我不断收到隐式实例化的错误。不管怎么说,我想说明的是类似的东西:带特征模板的类模板

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

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

你真的是'MyTemplateClass(DenseBase &eigenObject)'而不是'MyTemplateClass(DenseBase &eigenObject)'?另外,确切的错误是什么?什么编译器? –

回答

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 
}