C++ C++;专门化单成员函数
类模板成员专门化的问题 我有一个简单的类,我想专门化一个单成员函数。我是这样做的:C++ C++;专门化单成员函数,c++,templates,template-specialization,C++,Templates,Template Specialization,类模板成员专门化的问题 我有一个简单的类,我想专门化一个单成员函数。我是这样做的: template <class T> class Object { public: Object() {} void print() const { std::cout << "It's the template" << std::endl; } // ... }; template<>
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;
}
模板
类对象
{
公众:
对象(){}
void print()常量
{
std::cout问题是template类是在一个单独的头文件中定义的。如果只有一个源文件包含头文件,它就可以工作。如果两个或多个源文件包含头文件,GCC会抛出一个多定义错误。还有其他方法吗?您的方法是正确的,但完全专用化的成员不再是模板,因此no不再隐式内联
如果在标题中保留定义,或者拆分声明(在标题中)和定义(在cpp中),则必须添加inline
模板
内联void对象::print()
{
std::cout请编辑您的问题并添加来自编译器的确切错误消息。不幸的是,目前无法仅专门化模板类的一个成员函数;您需要专门化整个类。有关此问题的讨论,请参阅。您的专门化中有一个输入错误,应该是AspObject
,只要是对象
?您正在寻找的行为是吗?@NathanPierson我认为这是可能的,所讨论的函数不是模板函数,所以这个问题不完全相同。您完全可以专门化模板类的特定成员函数。哦,有趣!感谢您的更正,@FantasticMRFox您不应该问问题答案中的ns。答案部分用于问题的解决方案。抱歉,不会再这样做。您可能需要编辑问题以添加附加信息。要修复代码,它当前与对象
和AspObject
template<>
inline void Object<int>::print()
{
std::cout << "It's an int" << std::endl;
}