我有一个简化的类模板,类似于:
template<typename T>
class A
{
protected:
T _data;
public:
A* operator%(const A &a2) const
{
A * ptr;
ptr = new A(this->_data % a2._data);
return ptr;
}
};
另一个继承自该类的类:
class B : public A<double>
{
// ...
};
但是当我这样做时,编译器会说:
invalid operands of types ‘double’ and ‘const double’ to binary ‘operator%’
然后,我尝试将
operator%
专门用于double和float,因为%对于这些类型似乎是不可能的。我在类声明之后添加了以下代码。template<>
A* A<double>::operator%(const A &a2) const
{
A * ptr;
ptr = new A((uint32_t)this->_data % (uint32_t)a2._data);
return ptr;
}
我得到这个错误,我实际上不明白为什么...
In function `A<double>::operator%(A const&) const':
./include/A.hpp:102: multiple definition of `A<float>::operator%(A const&) const'
src/Processor.o:./include/A.hpp:102: first defined here
最佳答案
如果您在类之外实现了特化,则它不再是内联的,因此将被多次定义。内联标记:
template<>
inline A* A<double>::operator%(const A &a2) const
{
A * ptr;
ptr = new A(this->_data % a2._data);
return ptr;
}
或将其移动到类定义中。
关于c++ - 如何专门化类模板成员函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14872582/