模板class中嵌套class的C++静态成员变量
C++ static member variable of nested class in template class
我制作了一个模板class Block,想为Block的每个实例类型缓存一些数据。出于这个原因,我创建了一个内部 class Cache 来存储和初始化 Block class 实例经常使用的数据.但是编译器(Visual Studio 2017,C++17)不接受静态成员变量定义,错误消息对我没有帮助。我的代码有什么问题以及如何实现我的目标?
错误:
Error C2061语法错误:标识符'Cache'
警告:
警告 C4346 'Cache': 从属名称不是类型
template<int D>
class Block
{
private:
class Cache
{
public:
int mData[D];
public:
Cache();
};
private:
static Cache mCache;
public:
Block();
};
template<int D>
Block<D>::Cache Block<D>::mCache; // Syntax error "Cache"!
template<int D>
inline Block<D>::Block()
{
// Use cache data.
cout << Block<D>::mCache.mData[0] << endl;
}
template<int D>
inline Block<D>::Cache::Cache()
{
// Initialise cache data.
mData[0] = D;
}
添加typename
template<int D>
typename Block<D>::Cache Block<D>::mCache;
你可以阅读https://en.cppreference.com/w/cpp/language/dependent_name,但是简而言之,编译器不知道它是不是一个类型。
我制作了一个模板class Block,想为Block的每个实例类型缓存一些数据。出于这个原因,我创建了一个内部 class Cache 来存储和初始化 Block class 实例经常使用的数据.但是编译器(Visual Studio 2017,C++17)不接受静态成员变量定义,错误消息对我没有帮助。我的代码有什么问题以及如何实现我的目标?
错误:
Error C2061语法错误:标识符'Cache'
警告:
警告 C4346 'Cache': 从属名称不是类型
template<int D>
class Block
{
private:
class Cache
{
public:
int mData[D];
public:
Cache();
};
private:
static Cache mCache;
public:
Block();
};
template<int D>
Block<D>::Cache Block<D>::mCache; // Syntax error "Cache"!
template<int D>
inline Block<D>::Block()
{
// Use cache data.
cout << Block<D>::mCache.mData[0] << endl;
}
template<int D>
inline Block<D>::Cache::Cache()
{
// Initialise cache data.
mData[0] = D;
}
添加typename
template<int D>
typename Block<D>::Cache Block<D>::mCache;
你可以阅读https://en.cppreference.com/w/cpp/language/dependent_name,但是简而言之,编译器不知道它是不是一个类型。