gpt4 book ai didi

c++ - xtensor - Tensor 包装器在运行时引发 trivial_assigner 错误

转载 作者:行者123 更新时间:2023-11-28 01:30:55 27 4
gpt4 key购买 nike

我目前正在为一个应用程序使用 xtensor,我想包装张量以创建一个名为 BitArray 的类。

#include <iostream>
#include "xtensor/xarray.hpp"
#include "xtensor/xio.hpp"
#include "xtensor/xview.hpp"
#include "xtensor/xindex_view.hpp"

xt::xarray<double> arr {1, 2, 3};

template <typename E>
class BitArray{
public:
BitArray(const xt::xexpression<E>& _array, float _alpha) :
b(xt::cast<std::int8_t>(_array.derived_cast())), alpha(_alpha) {}
xt::xarray<E> b;
float alpha;
};

template <class E>
auto make_bitarray(xt::xexpression<E>& expr, float alpha)
{
return BitArray<E>(expr, alpha);
}

auto a = make_bitarray(arr, 3); // Error

我收到以下错误消息:

Standard Exception: Precondition violation!
Internal error: trivial_assigner called with unrelated types.
/srv/conda/include/xtensor/xassign.hpp(505)

这是什么意思,我该怎么做才能解决这个问题?

最佳答案

稍微好一点的解决方案是在 make_bitarray 函数中创建转换:

template <typename T>
class BitArray{
public:
BitArray(T&& _array, float _alpha) :
b(std::move(_array)), alpha(_alpha)
{
}

T&& b;
float alpha;
};

template <class T>
auto make_bitarray(const xt::xexpression<T>& expr, float alpha)
{
auto cast = xt::cast<int8>(expr);
// need to move temporary here
return BitArray<decltype(cast)>(std::move(expr), alpha);
}

关于c++ - xtensor - Tensor 包装器在运行时引发 trivial_assigner 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51549114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com