【发布时间】:2021-05-06 21:31:10
【问题描述】:
我正在尝试为 Eigen::Matrix 创建一个包装类。它应该接收一个指向静态大小特征向量(1 行矩阵)的指针,并且应该在调用 getValue() 函数时返回一个副本。这是我目前拥有的
template<std::size_t N>
class InputV
{
public:
InputV(const Eigen::Matrix<double, N, 1>* in) : in_(in)
{
}
Eigen::Matrix<double, N, 1>
getValue() const
{
return *in_;
}
private:
const Eigen::Matrix<double, N, 1>* in_;
};
TEST_CASE("dummy")
{
Eigen::Matrix<double, 10, 1> a;
InputV<10> in(&a);
}
但是,我需要两次明确地告诉它大小,一次是在源指针初始化期间,另一次是在创建 InputV 包装类时。有没有办法让 InputV 推断大小 N,所以我不必指定两次?
谢谢!
【问题讨论】:
-
decltype(in_)? -
嗯,我不熟悉那个说明符。我正在看它,但你能解释一下我如何使用它来提供帮助吗?谢谢!
-
您可以将 ctor 替换为
InputV(decltype(in_) in) : in_(in) {},但是您的属性in_必须在 ctor 之前声明(即在您的类定义中更高)。 -
嗯,我不知道 decltype 可以做到这一点,看起来很整洁,谢谢!
-
我相当肯定
decltype(in_)将返回Eigen::Matrix<double, 10, 1> const * &,这可能不是您想要的。