【发布时间】:2023-03-12 06:00:01
【问题描述】:
我正在编写一个使用 Eigen 数据类型的泛型类。我已经在将构造函数参数分配给类成员变量时遇到了问题。我的代码的简化版本是:
template <typename Derived>
class A
{
public:
Eigen::Matrix<Derived> M; // error C2976: too few template parameters
A(const Eigen::DenseBase<Derived> & V)
{
M = V.eval(); // I would want to snapshot the value of V.
}
};
我现在的问题是M 应该是什么数据类型?我尝试了多种选择,例如:
Eigen::internal::plain_matrix_type_column_major<Derived> M;
Eigen::DenseBase<Derived> M;
但它们只会产生不同的错误。 请注意,我使用 C++17 并期望从构造函数中推断出类模板参数。
【问题讨论】:
-
'模板参数太少' – 如果
Eigen::Matrix对您来说是正确的类型,那么请继续使用,但要找出 other parameters 的用途和适当地应用它们(提示:您可能还需要为自己的类提供更多模板参数)。 -
你打算如何使用
A?Derived可以有哪些类型?如果您想将任何Derived类型存储在相应的普通类型中(这会自动派生标量类型、尺寸等),您可以尝试Derived::PlainObject。 -
我希望由密集矩阵/数组导出。
V可以有固定、动态或混合大小。M旨在仅存储V的值,这就是.eval()的原因。一般来说,A将根据V计算新值,但我需要保留输入和其他中间结果以供以后使用。 -
您能否发布一个minimal reproducible example,说明您打算如何使用
A?我猜你本质上是想写A a{some_expression};,对吧?
标签: c++ c++17 eigen template-argument-deduction class-template