C++抽象基模板类非空方法
C++ Abstract Base Template Class Non-Void Method
我有一个抽象的基模板类,其中包含成员函数,其中一些是空的,另一些返回从原始数据类型到模板参数数据类型的数据类型。我仍然是C++新手,我知道我不一定要在基类中实现纯虚函数,除非我希望在派生类中调用它们。这个想法对于没有返回值的成员函数很好。对于返回整数的函数,我返回了 0。但是当我到达一个返回对模板参数 T 的引用的函数时,我不知道该怎么做。我尝试了以下两个返回。
template <typename T>
T& AbstractBaseClass<T>::function(){
return T();
}
和
template <typename T>
T& AbstractBaseClass<T>::function(){
return T& tmp= T();
}
但似乎两者都不起作用,我不能不定义这些函数,因为我得到了函数的未定义引用错误。我认为此错误是因为函数是模板。实现非空纯虚函数的适当方法是什么?
template <typename T>
class AbstractBaseClass{
public:
virtual ~AbstractBaseClass() = 0;
T& function();
}
template <typename T>
T& AbstractBaseClass<T>::function(){
//what must I do here when I don't have any member variable
}
下面是
一个纯虚函数和实现它的派生类的示例(为清楚起见,省略了一些成员函数(:
template <class T>
class Base
{
public:
virtual T& get() = 0;
virtual ~Base() = 0;
};
template <class T>
Base<T>::~Base() {}
template <class T>
class Derived: public Base<T>
{
T t;
public:
T& get() override { return t; }
};
请注意,Base
中的get()
没有实现,并且 Derived
中get
的实现使用了 Base
中不可用的新数据成员。
另请注意,与其他纯虚函数不同,纯虚拟析构函数必须具有实现。通常,如果类中有其他纯函数,则不需要纯虚拟析构函数。此处显示是为了说明。
相关文章:
- 如何在从抽象基派生的类中实现相同的方法?
- 让编译器告诉什么确切的纯虚拟方法使结构抽象?
- 对纯抽象类中方法的未定义引用
- 用c++中的纯虚拟方法抽象模板类
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 工厂方法模式使用继承而抽象工厂模式使用组合如何
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- c++ 中的抽象方法是否曾经调用过?
- 无法实例化抽象类,但类不是抽象/派生方法的参数
- 在 c++ 中抽象两个略有不同的函数的最佳方法是什么?
- 抽象类/接口中的空方法是否被认为是一种好的做法?
- 如何使用抽象类中未包含的方法
- 抽象包装带有异常的 C 错误处理的最佳方法
- 确保派生的类实现至少是来自抽象类(C )的两种方法之一
- C :如何在此抽象类的方法中返回抽象类
- 我将如何通过抽象类传递虚拟方法,但可以选择不重写
- 从子类中的抽象类调用方法
- 我们可以通过在C++中的类中使用关键字“abstract”使所有方法抽象来声明接口类吗
- 调试数据方法 Q抽象表模型