C++专门化单成员函数
C++ Specializing single member 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;
}
这最终导致成员函数的多个定义的编译错误。
如果只有一个源文件包含头,那么一切都很好。
如果两个文件包括标题,我会得到以下错误:
/home/marc/QtProjects/QtAsp服务/build-asspservice-Desktop_Qt_5_15_0_GCC_64bit-Debug//src/Asp/aspobject.h:34:Fehler:"Asp2::print(("的多重定义;main.o:/home/marc/QtProjects/QtAsp Service/build-asspservice-Desktop_Qt_5_15_0_GCC_64bit-Debug//src/Asp/aspobject.h:34:此处首次定义
这通常是可能的吗?如果是,那是怎么回事。
您的方法是正确的,但完全专业化的成员不再是模板,因此不再隐式内联。
如果在头中保留定义,或者拆分声明(在头中(和定义(在cpp中(,则必须添加inline
。
template<>
inline void Object<int>::print()
{
std::cout << "It's an int" << std::endl;
}
问题是模板类是在一个单独的头文件中定义的。如果只有一个源文件包含标头,它就可以工作。如果两个或多个源文件包含标头,GCC将抛出多重定义错误。还有别的办法吗?
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 将公共但非静态的成员函数与ALGLIB集成
- 使用指向成员的指针将成员函数作为参数传递
- 将重载的成员函数传递给函数模板
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何在C++中使用非静态成员函数作为回调函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 关联容器的下界复杂性:成员函数与非成员函数
- 在 C++ 中用派生类型重写成员函数
- 链表的泛型函数remove()与成员函数remove)
- 如何将lambda作为模板类的成员函数参数
- constexpr构造函数需要常量成员函数时出现问题
- 将自由函数绑定为类成员函数
- 区分非成员函数和头文件中的成员函数
- 如何从子成员函数修改父公共成员变量
- 保留对其他类的成员函数的引用
- 在运算符重载定义中使用成员函数(const错误)
- 内联如何影响模块接口中的成员函数
- 将成员函数指针作为参数传递给模板方法