制作一个返回通用成员函数指针的虚拟函数

时间:2018-11-22 10:57:19

标签: c++ qt design-patterns c++14 type-erasure

我想编写一个名为COMMUNICATOR的抽象类,它具有一个虚函数get_func()

class COMMUNICATOR : public QObject{
public:
    virtual <what type???> get_func() = 0;
};

现在假设INT_SENDERINT_RECEIVERSTR_SENDERSTR_RECEIVER均来自COMMUNICATOR。它们每个都提供自己的get_func()实现,并且可以这样使用:

COMMUNICATOR *int_sender = new INT_SENDER;
COMMUNICATOR *int_receiver = new INT_RECEIVER;

COMMUNICATOR *str_sender = new STR_SENDER;
COMMUNICATOR *str_receiver = new STR_RECEIVER;

//INT_SENDER::get_func() and INT_RECEIVER::get_func() both return a member function pointer of signature void(*)(int)
connect( int_sender, int_sender->get_func(), int_receiver, int_receiver->get_func() );

//STR_SENDER::get_func() and STR_RECEIVER::get_func() both return a member function pointer of signature void(*)(std::string)
connect( str_sender, str_sender->get_func(), str_receiver, str_receiver->get_func() );

我要通过这种设计实现的目标是:

(1)为从COMMUNICATOR派生的所有类提供相同的接口:get_func()函数

(2)使用COMMUNICATOR及其派生类不需要处理get_func()返回的函数的签名。而是将函数指针直接传递到connect();

是否有某种方法可以实现我想要的功能,例如使get_func()返回一些擦除类型的包装器对象,从中我可以将函数指针转储到connect()中?还是我在这里尝试不可能的事情?

0 个答案:

没有答案