是否可以拥有一个包含许多纯虚函数的抽象基类:
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;
};
然后派生类只实现其中一个函数?
e.g。
class Test : public Functor<void> {
public:
void operator()() {
std::cout << "Called Test::operator()" << std::endl;
}
};
我有一个基础Functor
类的原因是我可以在矢量中存储仿函数。
答案 0 :(得分:2)
不,那是不可能的。如果您在T operator()(U)
上拨打Test*
并且尚未实施该怎么办?你最终必须有一个类实现它们(或者从一个或多个实现它们的类继承)来实例化它。
您可以保留任意数量的虚函数,但如果这样做,您的类将无法实例化,因为它仍然是抽象的。你必须从它继承另一个类并定义那些未定义的函数并实例化它。
tl; dr:要在类层次结构中的某个地方实例化一个类,所有虚函数都必须有一个定义。
答案 1 :(得分:2)
是的,这是可能的。但派生类仍然是抽象的。
答案 2 :(得分:2)
是的,这是可能的。但是,这意味着派生类本身仍然是抽象的,无法实例化,您需要从中进一步派生,直到您定义了所有虚函数。