模板编程中的数据成员访问

apr*_*amc 4 c++ template-meta-programming c++11

我正在创建一个模板类,它具有两种不同大小的特殊行为,以及一般类中的一般行为,如下所示::

template<typename T, size_t DIM>
class Dataset
{
public:
    // all the constructors are defaulted
    // all the general behavior implementation

    std::vector<T> _data;
};
Run Code Online (Sandbox Code Playgroud)

鉴于下面课程的数据流量,我希望能够访问_data向量,对吗?

template<typename T>
class Dataset<T, 1>
{
public:
    T & operator()(const size_t & index)
    {
        return _data[index];
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,我得到_data的编译错误无法解决.这里有什么问题 ?!!谢谢

asc*_*ler 7

类模板特化是它自己的类,与主模板无关.所以Dataset<T, 1>没有_data成员,因为你没有在其类定义中声明一个成员.

如果您需要同一模板的不同特化之间的共同特征,则可以将它们移动到共享基类.