Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;专门化单成员函数_C++_Templates_Template Specialization - Fatal编程技术网

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;
}