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

时间:2010-07-07 19:43:05

标签: c++ templates static-members shared-state

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

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

因此,我基本上是

template<class T, int N>
class SpecialArray
{
//...
private:
   static map<string, internal_t> lookupTable
}

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

template <class T, int N>
SpecialArray<T,N>::lookupTable;

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

我怀疑它可能只是一个梦想而且正确的答案只是使它成为一个单独的全局单例对象,但无论如何要使它只有一个lookupTable用于所有SpecialArray 1}} S'

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

template <class T, int N>
SpecialArray<*,*>::lookupTable;

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

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

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

提前感谢您提供任何帮助或同情。

2 个答案:

答案 0 :(得分:19)

您可以添加非模板化基类并将lookupTable移动到该类中:

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

template<class T, int N>
class SpecialArray : Base
{
    //...
};

答案 1 :(得分:0)

听起来你应该让它们全球化而不用担心它。 也许使用名称空间是你想要的?