0

我对 xtensor 类型有点迷茫。我想创建一个可以接受表达式或容器的函数。我怎么做?

IE:

auto multbytwo(WHATGOESHERE x) {
    return x * 2;
}

xt::xtensor<double, 2> a = whatever;
auto b = a + 3.0;
auto c = multbytwo(b);
// now c should NOT be a container, it should be an un-evaluated xexpression.

...就像我说的那样,如果 multbytwo 函数的参数是评估容器或“未评估”xexpression,我希望它能够正常工作。甚至可能吗?如果参数是一个表达式,我想将没有评估的表达式传递给一个临时的。我的理解是,如果 WHATEVER 是xtensor那么它将评估表达式,而我不希望那样。

4

1 回答 1

0

每个表达式类型Exarray,xfunction等)都继承自xexpression<E>. 因此,您可以制作multbytwo一个接受此类型的模板函数,并在使用它之前向下转换参数:

template <class E>
auto multbytwo(const xt::xexpression<E>& x)
{
    return x.derived_cast() * 2;
}
于 2021-03-16T23:52:06.703 回答