0

这就是我想要做的:我有一个带有成员(属性)的类,它是一个函数指针。在创建者中,我想将同一类的一些方法分配给该指针(取决于某些条件),然后在其他方法中使用它。例如:

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;
   }
  ...
 };

当我在 CodeBlocks 中编译此代码时,我收到此错误:

error: cannot convert ‘monton::mayor’ from type ‘bool (monton::)(int, int)’ to type ‘bool (*)(int, int)’|
4

2 回答 2

1

此错误告诉您您正在尝试将指向非静态成员函数的指针分配给常规函数指针类型的变量。正确的指针声明将是:

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;
于 2017-05-20T17:26:39.827 回答
0

另一种解决方案。您必须使比较器静态。

#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;
}
于 2020-07-28T18:35:17.380 回答