2010-07-07 94 views
9

我正在做的事情可能是愚蠢的,但它会很好,如果它的工作。我试图以一种我需要我自己的基本上是全局的查找结构(但理想地封装为一个类变量)的方式来专门化类型,但我希望对象是类型安全的,所以它们被参数化。模板实例之间共享静态成员? (不可能?)

因此,我也有,基本上

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 s运行附加到各种实例SpecialArray

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

一样,在C++中我的心(这是不是真正的C++),这会去像

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

...但可悲的是GCC并不在我的脑海编译C++

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

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

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

+0

什么是'internal_t'? – 2010-07-07 19:54:33

+1

相关问题:[C++静态模板成员,每个模板类型的一个实例?](http://stackoverflow.com/questions/2220975/c-static-template-member-one-instance-for-each-template-type ) – 2010-07-07 19:57:43

回答

18

你可以添加一个非模板基类和移动lookupTable成类:

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

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

该死 - 我正在写这篇文章,但太慢了。补充说明:与往常一样,类中的'lookupTable'声明就是:声明。您仍然需要在类定义之外定义它的一个实例... – 2010-07-07 20:16:14

0

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