[英]Can I declare and use a static-non-template member of a template class in C++?
假设我有:
namespace name{
template< typename T >
class Example
{
....
};
}
我想要一个地图实例,我将在所有继承自Example
的类中使用它。 我想到的第一件事是拥有Example
的static
成员,但它会迫使我为每个将使用它的类拥有一个唯一的成员 - 由于内存使用限制,我不希望这样(我在这里错了吗?)。
在namespace
中声明它也会为每个编译单元创建一个实例。
我该怎么做才能克服这个问题?
顺便说一句,我最初的解决方案是 [使用 const extern map][1],但我无法理解我遇到的错误。
编辑:
我遵循了@SamVarshavchik 的回答,现在我遇到了与上一个问题相同的错误。
namespace name{
struct Example_base {
protected:
static std::map<std::string, int> the_same_map;
};
template< typename T >
class Example : public Example_base
{
....
};
}
结果
不能使用针对符号“name::Example_base::map”的偏移量 0xd3 处的 R_X86_64_PC32 重定位; 使用 -fPIC 重新编译
对于每个编译单元 [1] 中的每个用法: 使用 const extern 映射时的 R_X86_64_PC32 重定位
请注意,我有多个使用相同模板实现Example
的类的实例,并且我不能使用此标志
这就需要继承。
namespace name{
struct Example_base {
protected:
static std::map<std::string, int> the_same_map;
};
template< typename T >
class Example : public Example_base
{
....
};
}
现在, Example
模板的任何实例的所有子类都共享the_same_map
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.