繁体   English   中英

C++ 专业单身会员 function

[英]C++ Specializing single member function

class 模板成员专业化的问题。

我有一个简单的 class,我想专门化一个成员 function。我这样做:

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

最终导致成员 function 的多重定义出现编译错误。

如果只有一个源文件包含 header 一切都很好。

如果两个文件包含 header,我会收到以下错误:

/home/marc/QtProjects/QtAsp-Service/build-aspservice-Desktop_Qt_5_15_0_GCC_64bit-Debug/../src/Asp/aspobject.h:34: Fehler: `Asp2::print()' 的多重定义; main.o:/home/marc/QtProjects/QtAsp-Service/build-aspservice-Desktop_Qt_5_15_0_GCC_64bit-Debug/../src/Asp/aspoject.h:34:首先定义在这里

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

您的方法是正确的,但是完全专业化的成员不再是模板,因此不再隐式内联。

如果保留 header 中的定义,或者拆分声明(在 header 中)和定义(在 cpp 中),则必须添加inline

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

问题是模板 class 是在单独的 header 文件中定义的。 如果只有一个源文件包含 header,它就可以工作。 如果两个或多个源文件包含 header GCC 则抛出多重定义错误。 还有其他方法吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM