有没有可能有一个带有一些纯虚函数的抽象基类:
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 中。
最佳答案
不,那是不可能的。如果您在 Test*
上调用了 T operator()(U)
但它没有实现怎么办?您最终必须让一个类实现所有这些(或从一个或多个实现它们中的每一个的类继承)来实例化它。
您可以保留任意数量的虚函数未定义,但如果您这样做,您的类将无法实例化,因为它仍然是抽象的。您必须让另一个类继承它并定义那些未定义的函数并将其实例化。
tl;dr:要实例化一个类,在其类层次结构中的某个位置,所有虚函数都必须有一个定义。
关于c++ - 允许派生类从基础抽象类实现单个纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218866/