是否可以有一个带有多个纯虚函数的抽象基类:
template <typename T, typename U = NullType, typename V = NullType>
class Functor {
public:
virtual ~Functor() {}
virtual T operator()() = 0;
virtual T operator()(U arg1) = 0;
virtual T operator()(U arg1, V arg2) = 0;
};
然后派生类仅实现这些功能之一?
例如
class Test : public Functor<void> {
public:
void operator()() {
std::cout << "Called Test::operator()" << std::endl;
}
};
我有一个基本的
Functor
类的原因是为了可以将函子存储在 vector 中。 最佳答案
不,那不可能。如果您在T operator()(U)
上调用了Test*
却没有实现该怎么办?您最终必须让一个类实现所有这些类(或从实现每个类的一个或多个类继承)来实例化它。
您可以保留许多未定义的虚函数,但是如果这样做,您的类将无法实例化,因为它仍然是抽象的。您将不得不从另一个类继承它,并定义那些未定义的函数并将其实例化。
tl; dr:要实例化一个类,在其类层次结构中的所有虚函数必须具有一个定义。