gpt4 book ai didi

c++ - 在模板实例化之间共享静态成员? (不可能的?)

转载 作者:可可西里 更新时间:2023-11-01 15:46:00 25 4
gpt4 key购买 nike

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

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

因此,基本上我有

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?

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

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

...但遗憾的是 GCC 并没有编译我心目中的 C++

是否有任何实际方法可以得到我想要的东西(在 C++0x 领域或其他地方)?我也可能会遇到一些操作此查找表(不跟踪类型或 Ns)的静态方法的问题。

...抱歉,如果这没有任何意义。

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

最佳答案

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

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

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

关于c++ - 在模板实例化之间共享静态成员? (不可能的?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com