我实现了以下接口:
template <typename T>
class Variable
{
public:
Variable (T v) : m_value (v) {}
virtual void Callback () = 0;
private:
T m_value;
};
一个合适的派生类应该像这样定义:
class Derived : public Variable<int>
{
public:
Derived (int v) : Variable<int> (v) {}
void Callback () {}
};
但是,我希望派生Callback
接受不同参数的类(例如:void Callback (int a, int b))
.有办法做到吗?
5条答案
按热度按时间vxqlmq5t1#
这是我运行过很多次的问题。
这是不可能的,而且理由很充分,但有一些方法可以实现本质上相同的事情。就我个人而言,我现在用途:
实际应用:
zlhcx6iw2#
即使这样的事情是可能的,将其作为虚函数也不再有多大意义,因为派生示例化不能通过指向基类的指针以多态方式调用。
bprjcwpo3#
我认为这是不可能的,因为你永远不可能将它接口回变量。这就是我的意思
iqih9akk4#
我知道这是一个公认的答案,但有一个(丑陋的)方式来实现你想要的,虽然我不会推荐它:
现在,您可以用途:
你需要 values 参数来获取方法中剩下的参数,你还需要知道参数的类型,并像printf一样传递它们。
这种方法容易出错,因为您必须将 values 上的参数类型与真实的参数类型匹配。
clj7thdc5#
你必须在接受这些参数的基类中添加一个重载的Callback。它也有可能做一些不好的事情,比如接受一个void*,或者传入一个原始的指向字节的指针。改变虚函数签名唯一有效的情况是当你将返回值重写为原始返回值的多态值时,例如 *this。