我的语法与此类似:
template <class P>
class Foo : public P
{
public:
template <class T> Foo<P> & operator += (const T & v)
{
/*grind*/
return (*this);
}
};
当我尝试针对特定类型(operator +=
)专门化class Foo
({1}}之外)时,问题就开始了。我能做到这一点:
int
但是部分专业化是不可能的,此时几乎不可能知道template <class P> Foo<P>& Foo<P>::operator += ( const int & v)
{...}
的类型。
有没有解决方案?
谢谢, Raxvan。
答案 0 :(得分:1)
不是将逻辑放在operator+=
中,而是将其放在辅助类中,而是可以根据需要进行部分专门化。
答案 1 :(得分:1)
节点打败了我,但这里有一些可能有用的代码(虽然我使用的是带有重载而不是辅助类的裸函数):
template <class P>
class Foo : public P
{
public:
template <class T> Foo<P> & operator += (const T & v)
{
detail::implement_plus_equal( * this, v );
return * this;
}
};
namespace detail {
template <class P>
void implement_plus_equal(Foo<P> & f, int v)
{
/* grind an int */
}
template <class P, typename T>
void implement_plus_equal(Foo<P> & f, T const & v)
{
/* grind a T */
}
}