gpt4 book ai didi

C++ 特化单成员函数

转载 作者:行者123 更新时间:2023-12-04 08:35:16 25 4
gpt4 key购买 nike

类模板成员特化的问题。
我有一个简单的类,我想专门化一个成员函数。我这样做:

template <class T>
class Object
{
public:
Object() {}

void print() const
{
std::cout << "It's the template" << std::endl;
}
// ...
};

template<>
void Object<int>::print() const
{
std::cout << "It's an int" << std::endl;
}
这最终导致成员函数的多个定义的编译错误。
如果只有一个源文件包含标题,则一切正常。
如果两个文件包含标题,我会收到以下错误:

/home/marc/QtProjects/QtAsp-Service/build-aspservice-Desktop_Qt_5_15_0_GCC_64bit-Debug/../src/Asp/aspobject.h:34: Fehler: multiple definition of `Asp2::print()'; main.o:/home/marc/QtProjects/QtAsp-Service/build-aspservice-Desktop_Qt_5_15_0_GCC_64bit-Debug/../src/Asp/aspobject.h:34: first defined here


这一般可能吗?如果是,有什么问题。

最佳答案

你的方法是正确的,但完全特化的成员不再是模板,所以不再隐式内联。
您必须添加 inline如果您在标题中保留定义,或者拆分声明(在标题中)和定义(在 cpp 中)。

template<>
inline void Object<int>::print()
{
std::cout << "It's an int" << std::endl;
}

关于C++ 特化单成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64829668/

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