我有以下代码(it's on ideone.com):
template<class T>
class CMemoryPool
{
public:
CMemoryPool(int param1)
: stuff(param1)
{}
private:
T stuff;
};
template<class T>
class CList
{
public:
struct Entry
{
T data;
};
static CMemoryPool<Entry> s_pool;
};
template<class T>
CList<T>::CMemoryPool<CList<T>::Entry>::s_pool(1);
int main()
{
CList<int> list;
}
我似乎无法在类之外进行
s_pool
的初始化以进行编译。谁能帮我弄清楚如何进行这项工作?注意我仅使用C ++ 03。 最佳答案
编辑:
我的印象是:
您必须为模板的每个实例显式地将值赋予静态值:
CList<int>::CMemoryPool<CList<int>::Entry>::s_pool(1);
必须在您的* .C文件中的某处...
或者,在用于获取值的表的方法中使用静态局部变量。
但是玩了一点之后,这似乎可以在ideone中编译
template<class T>
CMemoryPool<typename CList<T>::Entry> CList<T>::s_pool(1);
我仍然推荐@FredOverflow解决方案,因为它可以保护您免受static initialization problems