在类构造函数中传递函数代码 我想知道是否可以将代码函数传递给C++中的类的构造函数?
类hpp在类构造函数中传递函数代码 我想知道是否可以将代码函数传递给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函数,我可以在创建对象时实例化它
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是一个函数声明,而不是您声明的指针