c++模板专门化问题

C++ Template Specialization problem

本文关键字:问题 专门化 c++      更新时间:2023-10-16

我有一个类似的语法:

template <class P>
class Foo : public P
{
public:
    template <class T> Foo<P> & operator += (const T & v)
    { 
         /*grind*/
         return (*this);
    }
};

当我尝试为特定类型(例如int)专门化operator += (class Foo之外)时,问题开始了。我可以这样做:

template <class P> Foo<P>& Foo<P>::operator += ( const int & v)
{...}

但是局部专门化是不可能的,实际上不可能知道P的类型。

有什么解决办法吗?

谢谢,Raxvan .

与其将逻辑放在operator+=中,不如将其放在helper类中,这可以根据需要部分专门化。

Node打败了我,但这里有一些代码可能会有所帮助(尽管我使用的是带有重载的裸函数,而不是helper类):

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