将字符串作为对函数指针 c++ 的引用传递

Passing string as reference to function pointer c++

本文关键字:c++ 引用 指针 函数 字符串      更新时间:2023-10-16

下面是我的代码

 #include "stdafx.h"    
 #include <string.h>    
 #include <iostream.h>
 using namespace std;
 class ToDoCommands
 {
 public:    
     void getCommand(string);
 };
 void ToDoCommands::getCommand(string command) 
 {
     cout<<command;   //here i get ping
     void (*CommandToCall)(void);
     CommandToCall = command; // error here i want something like
                              //  CommandToCall = ping 
     CommandToCall();
 }
 void ping(void)
 { 
    cout<<"ping command executed";
 }
 int main()
 {
     ToDoCommands obj;
     obj.getCommand("ping");
 }
函数

指针应动态引用函数 ping。与函数名称相同的字符串被传递给 main 中的 getCommand 函数。

C++就是不这样工作。如果你真的需要这样的东西,你必须创建一个按名称索引的函数表:

#include <assert.h>
#include <iostream>
#include <map>
#include <string>
using std::cout;
using std::string;
using std::map;
void ping(void)
{
  cout << "ping command executedn";
}
class ToDoCommands
{
  public:
    typedef void (*FunctionPtr)();
    typedef string Name;
    void registerFunction(Name name,FunctionPtr);
    void callFunction(Name);
  private:
    map<Name,FunctionPtr> func_map;
};
void ToDoCommands::registerFunction(Name name,FunctionPtr func_ptr)
{
  func_map[name] = func_ptr;
}
void ToDoCommands::callFunction(Name name)
{
  assert(func_map.find(name)!=func_map.end());
  func_map[name]();
}
int main(int argc,char **argv)
{
  ToDoCommands to_do_commands;
  to_do_commands.registerFunction("ping",ping);
  to_do_commands.callFunction("ping");
  return 0;
}
void ping(void)    
{   
    //  LL  DD…DD   XX
    cout<<"ping command executed"<<endl;
}
class ToDoCommands    
{
public:
    void getCommand( void (*CommandToCall)(void));  //getCommand(ping)  
};
void ToDoCommands::getCommand( void (*CommandToCall)(void) )
{
    void (*CommandToCall1)(void);
    CommandToCall1  = CommandToCall;
    CommandToCall1();
}
int main()
{
    ToDoCommands obj;
    obj.getCommand( ping );
    return 0;
}

我试过这个及其工作:)