我正在使用基于接口的编程开发项目。第一部分是针对上下文,以防万一有人说我做了一些完全错误的事情,或者有一种不同的方法可以解决我的问题。
我有一个包含几个抽象接口类的容器类。这些定义了返回我需要的数据的函数。
此容器类有一个不知道容器类的部件向量,因此不包含接口头。
每个部分都是同一类型的对象。创建这些对象时,它会将函数指针作为参数传递给子对象的构造函数。该参数是指向其中一个接口类中定义的函数的指针。
我正在尝试使用&iTheInterfaceClass::theDataFunction
将指针传递给期望U16(*pDataFunction)()
的构造函数。
这会导致错误
cannot convert 'U16 (iTheInterfaceClass::*)() {aka short unsigned int (iTheInterfaceClass::*)()}' to 'U16 (*)() {aka short unsigned int (*)()}' in initialization
如果部件包含.h文件,我可以使用它,因为我只是匹配原型以在构造函数中包含命名空间。然而,这打破了我的抽象。如果每个部分包含不同的接口,我必须为每个部分创建单独的类,即使功能相同。
在没有完全重新调整我的策略的情况下,有没有让原型匹配?
答案 0 :(得分:0)
正如您自己所说,您的构造函数需要以下类型(不包括名称):
U16 (*)()
但是,您尝试传递以下类型:
U16 ( iTheInterfaceClass::* )()
您的构造函数接受静态的自由函数和类函数,但您尝试传递非静态成员函数。它们的类型不同。
您可以为构造函数提供重载,该构造函数接受成员函数以及指向将调用成员函数的对象的引用或指针。
它可能看起来像:
public:
typedef U16( iTheInterfaceClass::*MemberFunctionPtr )();
MyContainer( iTheInterfaceClass& member, MemberFunctionPtr function ) : ... { ... }
假设您将该信息存储在类中的某些变量中,则可以像这样调用该函数:
( member.*function )();
其中成员是保存对要调用函数的对象的引用的变量,函数是保存指向所述成员函数的指针的变量