我应该使用什么参数类型来接受 xexpressions?
What parameter type should I use to accept xexpressions?
假设我有 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 构造函数:
class WaffleWrapper {
public:
??? waffle;
WaffleWrapper(??? wafflein) {
??? waffle = wafflein;
}
};
我应该使用什么来代替 ???
以便我可以将 waffle
传递给它?
例如
auto waffle = xt::equal(open, close);
WaffleWrapper example(waffle);
就像我评论的那样,根据经验,您的 class 应该拥有自己的数据。因此,您应该创建一个数据容器,它将强制计算 xfunction
。此后,您 运行 没有风险指向可能超出范围的数据。
如果您担心失去使用数组固定性的能力,您可以考虑模板化 class:
#include <xtensor/xarray.hpp>
#include <xtensor/xfixed.hpp>
#include <xtensor/xview.hpp>
#include <xtensor/xio.hpp>
template<class T>
class WaffleWrapper {
public:
T waffle;
WaffleWrapper(const T& wafflein) {
waffle = wafflein;
}
};
int main()
{
using fixed_double = xt::xtensor_fixed<double, xt::xshape<1, 4>, xt::layout_type::column_major>;
using fixed_int = xt::xtensor_fixed<int, xt::xshape<1, 4>, xt::layout_type::column_major>;
fixed_double open = {{1., 3., 2., 5.}};
fixed_double close = {{5., 1., 6., 2.}};
auto waffle = xt::equal(open, close);
WaffleWrapper<fixed_int> example(waffle);
return 0;
}
请注意,为了便于阅读,我缩写了您的类型名称。
假设我有 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 构造函数:
class WaffleWrapper {
public:
??? waffle;
WaffleWrapper(??? wafflein) {
??? waffle = wafflein;
}
};
我应该使用什么来代替 ???
以便我可以将 waffle
传递给它?
例如
auto waffle = xt::equal(open, close);
WaffleWrapper example(waffle);
就像我评论的那样,根据经验,您的 class 应该拥有自己的数据。因此,您应该创建一个数据容器,它将强制计算 xfunction
。此后,您 运行 没有风险指向可能超出范围的数据。
如果您担心失去使用数组固定性的能力,您可以考虑模板化 class:
#include <xtensor/xarray.hpp>
#include <xtensor/xfixed.hpp>
#include <xtensor/xview.hpp>
#include <xtensor/xio.hpp>
template<class T>
class WaffleWrapper {
public:
T waffle;
WaffleWrapper(const T& wafflein) {
waffle = wafflein;
}
};
int main()
{
using fixed_double = xt::xtensor_fixed<double, xt::xshape<1, 4>, xt::layout_type::column_major>;
using fixed_int = xt::xtensor_fixed<int, xt::xshape<1, 4>, xt::layout_type::column_major>;
fixed_double open = {{1., 3., 2., 5.}};
fixed_double close = {{5., 1., 6., 2.}};
auto waffle = xt::equal(open, close);
WaffleWrapper<fixed_int> example(waffle);
return 0;
}
请注意,为了便于阅读,我缩写了您的类型名称。