[英]C++ template explicit specialization - calling existing member function
我正在使用显式模板专业化来初始化带有信息的std :: vector,但仅针对特定类型的std :: vector,因此是显式专业化。 在构造函数中,如果我尝试在std :: vector中调用push_back或任何其他现有函数,则编译将失败。 有什么问题,我该如何解决?
简化示例:
namespace std
{
template<>
class vector<int>
{
public:
vector(void)
{
int value = 5;
push_back(value);
}
};
}
编译器消息:
In constructor 'std::vector<int>::vector()':
error: 'push_back' was not declared in this scope
push_back(value);
^
显式专业是与主模板完全不同的类。 您必须重写所有内容。
在控制主模板的正常情况下,通常会使用某种通用基类或基类模板来收集通用结构。
对于给定的库,添加专业化通常是一个非常糟糕的主意(除非该库明确表示可以)。 使用C ++标准库,这是完全未定义的行为。
(主要问题是其他翻译部门可能正在使用您要专门化的模板实例化而没有看到您的专门化,这违反了一个定义规则。)
模板专业化是与主模板和任何其他专业化无关的类型。 目前尚不清楚您要做什么,因为在std
名称空间中提供模板的特殊化也是非法的,除非特殊化使用您自己的用户定义类型。
如果您可以解释要解决的问题,则可能会获得其他选择,例如专门化成员函数而不是模板本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.