gpt4 book ai didi

C++ CRTP(模板模式)问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:22:25 27 4
gpt4 key购买 nike

以下代码无法编译,问题出在 T::rank 不是不可访问的(我认为)或未在父模板中初始化。

你能告诉我到底是什么问题吗?明确通过等级是唯一的方法吗?或者有没有办法直接查询张量类?

谢谢

#include <boost/utility/enable_if.hpp>

template<class T, // size_t N,
class enable = void>
struct tensor_operator;

// template<class T, size_t N>
template<class T>
struct tensor_operator<T, typename boost::enable_if_c< T::rank == 4>::type > {
tensor_operator(T &tensor) : tensor_(tensor) {}
T& operator()(int i,int j,int k,int l) {
return tensor_.layout.element_at(i, j, k, l);
}
T &tensor_;
};

template<size_t N, typename T = double>
// struct tensor : tensor_operator<tensor<N,T>, N> {
struct tensor : tensor_operator<tensor<N,T> > {
static const size_t rank = N;
};

tensor <4> D; // compiler attempts to instantiate undefined template, not specialization

我知道解决方法,但是我对自学模板实例化的机制很感兴趣

最佳答案

在 CRTP 中,基类模板利用了这样一个事实,即成员函数体(定义)在其声明后很久才被实例化。在您的代码中,基类取决于不完整的类型。

关于C++ CRTP(模板模式)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2862915/

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