0

下面是我的代码

 #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 函数。

4

2 回答 2

1

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 executed\n";
}

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;
}
于 2012-09-14T04:57:58.080 回答
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;
}

我试过这个及其工作:)

于 2012-09-14T05:01:24.720 回答