Class 带有 Eigen 模板的模板
Class template with Eigen templates
我想制作一个简单的模板 class,其中包含一个具有动态大小的 Eigen 成员。我不断收到隐式实例化错误。不管怎样,我想做的是这样的:
template <class T>
class MyTemplateClass
{
public:
MyTemplateClass(DenseBase<Derived>& eigenObject);
private:
SomeSortOfTypeHereForDynamicAllocation eigenMember;
}
MyTemplateClass<T>::MyTemplateClass(DenseBase<T>& eigenObject)
{
eigenMember = eigenObject;
}
在模板化 class 中声明模板化成员函数(或构造函数)时,您需要添加另一个 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
}
我想制作一个简单的模板 class,其中包含一个具有动态大小的 Eigen 成员。我不断收到隐式实例化错误。不管怎样,我想做的是这样的:
template <class T>
class MyTemplateClass
{
public:
MyTemplateClass(DenseBase<Derived>& eigenObject);
private:
SomeSortOfTypeHereForDynamicAllocation eigenMember;
}
MyTemplateClass<T>::MyTemplateClass(DenseBase<T>& eigenObject)
{
eigenMember = eigenObject;
}
在模板化 class 中声明模板化成员函数(或构造函数)时,您需要添加另一个 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
}