【发布时间】:2020-03-05 20:21:29
【问题描述】:
假设我有 xtensor xexpression waffle。
xt::xtensor_fixed<double, xt::xshape<1, 4>, xt::layout_type::column_major> open = {{1., 3., 2., 5.}};
xt::xtensor_fixed<double, xt::xshape<1, 4>, xt::layout_type::column_major> close = { {5., 1., 6., 2.} };
auto waffle = xt::equal(open, close);
考虑waffle的类型为:xt::detail::xfunction_type_t<xt::detail::not_equal_to, xt::xtensor_fixed<double, xt::xshape<1U, 366U>, xt::layout_type::column_major> &, xt::xtensor_fixed<double, xt::xshape<1U, 366U>, xt::layout_type::column_major> &>
我想将waffle 传递给类构造函数:
class WaffleWrapper {
public:
??? waffle;
WaffleWrapper(??? wafflein) {
??? waffle = wafflein;
}
};
我会用什么来代替???,以便我可以将waffle 传递给它?
例如
auto waffle = xt::equal(open, close);
WaffleWrapper example(waffle);
【问题讨论】:
-
你应该决定你的班级应该举行什么。我假设
xt::xtensor<int,X>或xt::xarray<int>。这也应该是你的函数参数。通常,转换会处理所有事情。 -
@TomdeGeus 是的,但是转换为 xt::xtensor 或 xt::array 会大大降低程序速度
-
您确定这是实际演员表,还是您的表达式已被评估的事实?无论如何,我认为除非在非常紧急的情况下,一个类应该拥有自己的数据,所以我看不出如何避免评估表达式。
-
@TomdeGeus 哦,我明白你的意思了,所以直到我调用变量之前我的表达式才被评估?这就解释了庞大的类型名称。抱歉,我对 C++ 还是很陌生,但感谢您的帮助。
-
要将其转换为一个很好的问题,我建议您更改文件中的输入(仅存在于您的系统上),您手动指定一些简单的数组(或使用例如
xt::arange)。另见stackoverflow.com/help/minimal-reproducible-example
标签: c++ parameters parameter-passing xtensor