在类构造函数中传递函数代码 我想知道是否可以将代码函数传递给C++中的类的构造函数?

在类构造函数中传递函数代码 我想知道是否可以将代码函数传递给C++中的类的构造函数?,c++,C++,类hpp class A { public: A(void (*f)( parameters ... ); private: void comp( parameters ...); } class.cpp #include "class.hpp" A::A(void (*f)( parameters ....) { &comp = &f; } 背后的想法是我希望有一个comparison函数,我可以在创建对象时实例化它

类hpp

class A {
    public:
        A(void (*f)( parameters ... );
    private:
        void comp( parameters ...);
}
class.cpp

#include "class.hpp"
A::A(void (*f)( parameters ....) {
    &comp = &f;
}
背后的想法是我希望有一个comparison函数,我可以在创建对象时实例化它


非常感谢

是的,无论如何,声明函数指针的语法不是您使用的语法:

class A {
    public:
        A(void (*f)( int a ) ) : comp(f) {};
    private:
        void (*comp)( int a ); // Function pointer
};

void comparisonFun(int a) {
 //...   
}

int main()
{
    A obj(comparisonFun);
}
通过做

class A {
    public:
        A(void (*f)( parameters ... );
    private:
        void comp( parameters ...);
}

您正在声明一个
comp
函数。

以下是您可以执行此操作的方法。定义一种函数指针类型,如这里的PFN,然后在作为函数指针传递时将其用作参数类型,以实现优雅

void somefn(int a, char c) {
    // do something
}

typedef void (*PFN)(int, char);

class A {
    public:
        A(PFN pf);
    private:
        PFN comp;
};

A::A(PFN pf) {
    comp = pf;
}

int main()
{
    A a(somefn);
    return 0;
}

是,如果将成员设置为函数指针类型

void (*comp)(/*parameters*/);
并赋值,就像其他类型一样

comp = f;
或者,如果您愿意,在构造函数的初始化器列表中初始化它

A(void (*f)(/*parameters*/)) : comp(f) {}
您可能会发现使用类型别名更方便,因为函数指针类型对类型有点复杂

typedef void Comp(/*parameters*/);
Comp * comp;
可以使用和使用表达式初始化函数

class A {
    public:
        typedef std::function<void(int,int)> CompFun;

        A(CompFun f) : comp(f) { }
    private:
        CompFun comp;
};
A类{
公众:
typedef std::函数CompFun;
A(compfunf):comp(f){}
私人:
康芬康普;
};
然后调用传递lambda的构造函数:

A a([](int a, int b) 
    { 
        return a < b; 
    });
A([](int A,int b)
{ 
返回a
当然可以,但comp是一个函数声明,而不是您声明的指针