c++ - 单个函数指针能否指向多个类的成员函数

标签 c++ function-pointers class-members member-pointers

这是我的申请提出的要求。我有一个类 A,它接受一个函数指针,比如 cFunc,基本上在我的 A 实现中,我让它多次调用 cFunc。

cFunc 指针本身应根据应用指向不同的函数。因此,对于每个应用程序,我都创建了一个与 cFunc 具有相同函数定义的类,但是我无法将类的成员函数分配给该指针

class A {
    typedef double (*Def_CFunc)(std::vector<double>);
    A(Def_CFunc _cFunc) { // Some implementation}
    // Other Functions
};

class B { double someFunc(std::vector<double> b); };
class C { double someOtherFunc(std::vector<double> a); };

int main () {
    B firstObj;
    C secondObj;

    // Depending upon the situation, I want to select class B or C
    double (*funcPointer)(std::vector<double>) = firstObj.someFunc; // Error in this line of code

    A finalObj(funcPointer);
}

那么如何才能使任何具有给定格式成员函数的类都可以用来初始化类 A?

最佳答案

我不确定你的具体要求是什么,但看起来你想要一个 interface (或 C++ 术语中的抽象基类)。

如果 BC 都继承自一个公共(public)基类,您可以传递一个指向该基类的指针并在其上调用函数:

class I { virtual double func(std::vector<double> a) = 0; }
class B : public I { double func(std::vector<double> a); };
class C : public I { double func(std::vector<double> a); };

您可以将 I* 指针传递给 A 并仅使用 i->func

关于c++ - 单个函数指针能否指向多个类的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9545149/

相关文章:

c++ - 如何在事件发生时启动线程并正确关闭他们的手

c++ - 两个二项式系数的 GCD 模 10^9 + 7

c - 函数之间的文件指针上的 SegmentFault

c++ - 如何使用 std::function 指向函数模板

c++ - GCC 问题 : using a member of a base class that depends on a template argument

c++ - 无法从类中访问全局函数

c++ - 为什么这个单例实现使用私有(private)类(C++)?

c++ - C++中自定义默认构造函数和默认默认构造函数有什么区别

c++ - 如何使用需要指向 C++ 中 void 函数的指针的 Functor 来调用 C 函数?

c++ - GCC 问题 : using a member of a base class that depends on a template argument