11

我正在做一些可能很愚蠢的事情,但如果它有效,那就太好了。

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

因此,我基本上有

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.

我怀疑这可能只是一个白日梦,正确的答案就是让它成为一个单独的全局单例对象,但无论如何,有没有办法让lookupTable所有的SpecialArrays 都只有一个?

就像,在我心目中的 C++(这不是真正的 C++)中,这会像

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

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

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

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

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

4

2 回答 2

22

您可以添加一个非模板基类并移至lookupTable该类:

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

template<class T, int N>
class SpecialArray : Base
{
    //...
};
于 2010-07-07T20:04:46.723 回答
0

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

于 2010-07-07T19:49:53.997 回答