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 に答える