C ++模板专业化问题

时间:2011-08-06 00:19:01

标签: c++ template-specialization

我的语法与此类似:

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。

2 个答案:

答案 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 */
   }
}