模板类成员函数专业化

时间:2015-10-26 10:38:20

标签: c++ templates

在有人将此问题标记为this的副本之前,请让我解释一下我的问题。 我有一个类模板,其成员函数不是模板。我希望为特定的类模板参数添加此类函数体的其他版本。在我的情况下,它只能有两种变体:“true”或“false”< / p>

示例:

  template <bool IsEven>
  class EvenOddProcessor{

      public:

          bool ProcessEvenOdd();

  };
   //Default definition:
  template<bool IsEven>    
  inline bool EvenOddProcessor<IsEven>::ProcessEvenOdd()
  {

        return false;

  }

  //Now I want to define the special case of the function
  //when the class template param is true:    
  inline bool EvenOddProcessor<true>::ProcessEvenOdd()
  {

        return true;

  }

现在,这适用于MSVC编译器,而不适用于GCC。这并不奇怪,因为GCC总是对C ++标准更严格,据我所知,它不允许成员函数专业化。但是基于答案this question我想要做的事情仍然应该可以通过一些模板魔术来实现。在我的案例中,这些答案中的解决方案都没有。

1 个答案:

答案 0 :(得分:2)

您只需将其标记为template <>的专业化:

template <>
inline bool EvenOddProcessor<true>::ProcessEvenOdd()
{
    return true;
}

[Live example]