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