如何定义来自非模板基类的成员函数

时间:2011-03-29 12:18:34

标签: c++ templates abstract

我有一个非模板化的抽象基类。如何在派生类之外定义纯虚函数?

    #include <iostream>

    class base {
         public:
         virtual void func() = 0;
    };

    template<typename T>
    class der : public base{
    };

    template<typename T>
    void der<T>::func()
    {
         std::cout<<"In Der";
    }

出现以下错误:

template.cpp:13: error: no ‘void der<T>::func()’ member function declared in class ‘der<T>’
template.cpp:13: error: template definition of non-template ‘void der<T>::func()’

3 个答案:

答案 0 :(得分:5)

声明成员函数。

template<typename T>
    class der : public base{
    public:
        void func();
    };

您可能希望或不希望在派生类中覆盖成员函数的自动声明 - 您必须明确声明和定义这些函数。派生类是否作为模板实现并不重要。

答案 1 :(得分:2)

您必须在派生类定义中声明虚拟覆盖。

template <typename T>
class der : public base {
public:
    virtual void func();
};

答案 2 :(得分:1)

这将有效:

#include <iostream>

class base {
     public:
     virtual void func() = 0;
};

template<typename T>
class der : public base{
  public:
  void func()
  {
       std::cout<<"In Der";
  }
};

我建议我尽可能将函数定义直接删除到模板中,但专业化除外。

编辑:'inline'不是这里最好的选择