C++ C++;:是否可以将方法分配给同一类中的函数指针成员(atribute)?
这就是我要做的:我有一个带有成员(属性)的类,它是一个函数指针。在creator中,我希望将同一类的一些方法分配给该指针(取决于某些条件),然后在其他方法中使用它。例如:C++ C++;:是否可以将方法分配给同一类中的函数指针成员(atribute)?,c++,member-function-pointers,member-pointers,C++,Member Function Pointers,Member Pointers,这就是我要做的:我有一个带有成员(属性)的类,它是一个函数指针。在creator中,我希望将同一类的一些方法分配给该指针(取决于某些条件),然后在其他方法中使用它。例如: class monton { private: protected: bool (*comparador)(int a, int b); inline bool mayor(int a, int b) {return a > b;} inline bool menor(int a, int b)
class monton
{
private:
protected:
bool (*comparador)(int a, int b);
inline bool mayor(int a, int b) {return a > b;}
inline bool menor(int a, int b) {return a < b;}
...
public:
monton (bool maximo = true)
{
if(maximo) comparador = mayor;
else comparador = menor;
}
...
};
此错误告诉您试图将非静态成员函数的指针分配给常规函数指针类型的变量。正确的指针声明应该是:
bool (monton::*comparador)(int a, int b);
// or even better with type alias
using t_ComparadorPointer = bool (monton::*)(int a, int b);
t_ComparadorPointer comparador;
另一种解决办法。你必须使比较器静止
#include <functional>
class Monton
{
static std::function<bool(int, int)> comparador;
static inline bool mayor(int a, int b) { return a > b; };
static inline bool menor(int a, int b) { return a < b; };
public:
Monton(bool maximo)
{
comparador = mayor;
if(!maximo) comparador = menor;
};
};
std::function<bool(int, int)> Monton::comparador;
int main()
{
Monton monton(1);
return 0;
}
#包括
蒙顿班
{
静态标准::函数比较器;
静态内联布尔市长(inta,intb){返回a>b;};
静态内联bool menor(inta,intb){返回a
非常感谢。在被忽略后,我在使用函数指针时也遇到了问题。但是我发现我可以将它与这个sintax一起使用:(this->*comparidor)(x,y)
,我必须将指针指向这个sintax:comparidor=&monton::mayor代码>我想知道它是否正确和合适,或者我正在制造未来的问题。非常感谢。鉴于这些函数的性质(不以任何方式依赖于类实例),更好的选择是将它们设置为静态-然后可以将它们分配给函数指针。@AliRojas是的,这是正确的语法,在类名前面加上前缀就是获取非静态成员函数指针的方式。
#include <functional>
class Monton
{
static std::function<bool(int, int)> comparador;
static inline bool mayor(int a, int b) { return a > b; };
static inline bool menor(int a, int b) { return a < b; };
public:
Monton(bool maximo)
{
comparador = mayor;
if(!maximo) comparador = menor;
};
};
std::function<bool(int, int)> Monton::comparador;
int main()
{
Monton monton(1);
return 0;
}