如何调用此函数指针

How to call this function pointer

本文关键字:函数 指针 调用 何调用      更新时间:2023-10-16

我在尝试调用函数时在下面收到 C2064 错误。 我做错了什么?

//error C2064: term does not evaluate to a function taking 1 arguments
#include <iostream>
#include <string>
using namespace std;
class DXStartupEncoder {
public:
   void EncodeA(string& message) const { message = "A"; }
   void EncodeB(string& message) const { message = "B"; }
   void EncodeC(string& message) const { message = "C"; }
   void EncodeD(string& message) const { message = "D"; }
   void EncodeE(string& message) const { message = "E"; }
   void EncodeF(string& message) const { message = "F"; }
};
typedef void (DXStartupEncoder::*Encoder)(string&) const;
Encoder dn_sequence[] = {&DXStartupEncoder::EncodeA, &DXStartupEncoder::EncodeB, &DXStartupEncoder::EncodeC, &DXStartupEncoder::EncodeD };
Encoder queue_sequence[] = { &DXStartupEncoder::EncodeE, &DXStartupEncoder::EncodeF };

int main(int argc, char* argv[])
{
   for(int i = 0; i < sizeof(queue_sequence) / sizeof(queue_sequence[0]); ++i) {
      string param;
      queue_sequence[i](param);  //How to call function here???
      cout << param << endl;
   }
   return 0;
}

你没有函数指针,你有一个指向成员函数的指针数组。 取消引用指向成员的指针时,必须提供 this 对象。

(obj.*queue_sequence[i])(param);  //obj must have type DXStartupEncoder

或者,由于函数是无状态的,因此可以使它们static,然后使用普通函数指针。

typedef void (*Encoder)(string&) const;