在模板实例之间共享静态成员?(不可能?)

OhN*_*lus 10 c++ templates static-members shared-state

我正在做一些可能很愚蠢的事情,但如果它奏效的话会很好.

我试图以一种方式专门化类型,我需要自己的查找结构本质上是全局的(但理想情况下封装为类变量),但我希望对象是类型安全的,因此它们是参数化的.

因此,基本上我有

template<class T, int N>
class SpecialArray
{
//...
private:
   static map<string, internal_t> lookupTable
}
Run Code Online (Sandbox Code Playgroud)

无论出于什么原因,我都没有想到,直到我说到初始化lookupTable时才说

template <class T, int N>
SpecialArray<T,N>::lookupTable;
Run Code Online (Sandbox Code Playgroud)

将会有许多不同的lookupTables附加到各种实例化SpecialArray.

我怀疑它可能只是一个梦想而且正确的答案只是让它成为一个单独的全局单例对象,但无论如何要使它成为lookupTable所有SpecialArrays中只有一个?

比如,在我脑海中的C++(这不是真正的C++)中,这就像是

template <class T, int N>
SpecialArray<*,*>::lookupTable;
Run Code Online (Sandbox Code Playgroud)

...但遗憾的是GCC并没有在我的脑海中编译C++

有没有任何实际的方法来获得我想要的东西(在C++ 0x-land或某处)?我可能会遇到一些静态方法来处理这个问题,这些方法操纵这个查找表(它不跟踪类型或Ns).

...对不起,如果这没有任何意义.

在此先感谢您提供任何帮助或同情.

jon*_*son 18

您可以添加一个非模板化的基类并lookupTable进入该类:

class Base
{
protected:
    static map<string, internal_t> lookupTable
};

template<class T, int N>
class SpecialArray : Base
{
    //...
};
Run Code Online (Sandbox Code Playgroud)