簡體   English   中英

傳遞字符串作為對函數指針C ++的引用

[英]Passing string as reference to function pointer c++

下面是我的代碼

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

我嘗試了這個及其工作:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM