gpt4 book ai didi

C++ 模板显式特化 - 调用现有成员函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:21 24 4
gpt4 key购买 nike

我正在使用显式模板特化来初始化带有信息的 std::vector,但仅针对特定类型的 std::vector,因此是显式特化。在构造函数中,如果我尝试调用 push_back 或 std::vector 中的任何其他现有函数,编译将失败。问题是什么,我该如何解决?

简化示例:

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);
^

最佳答案

显式特化是与主模板分离的完全不同的类。您必须重写所有内容。

在您控制主模板的正常情况下,您通常会有某种公共(public)基类或基类模板来收集公共(public)结构。

对于给定的库,添加特化通常是一个非常糟糕的主意(除非库明确表示可以)。对于 C++ 标准库,这是完全未定义的行为。

(主要问题是其他翻译单元可能正在使用您正在专门化的模板实例化而没有看到您的专门化,这违反了单一定义规则。)

关于C++ 模板显式特化 - 调用现有成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20802402/

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