我正在编写一个模板化的 GPGPU 张量求和函数(主要是为了好玩,也是为了加深我对模板元编程和 GPGPU 编程的理解),我想做一些静态断言来防止函数的无效使用。
C++ AMP 类的要求之一array_view
是它是矩形的(即所有范围都相同)。
但是,我不完全确定如何做到这一点。目前我的功能看起来像:
template <typename T, typename U>
auto TensorSum( T t, U u )->decltype( std::remove_all_extents<T>::type + std::remove_all_extents<U>::type )
{
using SumType = decltype(std::remove_all_extents<T>::type + std::remove_all_extents<U>::type);
static_assert( std::rank<T>::value == std::rank<U>::value, "The two tensors must have the same rank" );
// ToDo: Put a static assertion here to ensure tensors are rectangular
SumType arrSum[std::rank<T>::value * std::extent<U>::value];
concurrency::array_view<std::remove_all_extents<T>::type, std::rank<T>::value> a( std::extent<T>::value, t );
}
我的主要问题是排名是一个变量,无法在编译时执行迭代。