2017-08-28 8 views
-6

メソッドを文字列名で呼び出す方法を探します。メソッドを文字列で呼び出し、引数を渡します。

#include <iostream> 
#include <string> 

class myClass{ 
    public: 
     void method1(int run){ 
      std::cout << run << std::endl; 
     } 
     void method2(int run){ 
      std::cout << run << std::endl; 
     } 
}; 

int main(){ 
    myClass mc; 
    std::string call; 

    call = "method1"; 
    mc.call(1); 

    call = "method2"; 
    mc.call(2); 
} 

しかし、その結果、ある

「MyClassクラスが」

「と呼んで」という名前のメンバーを持っていない私は、応答 "1" と "2" が必要です。

EDIT ::非常にありがとう、私は次の解決策を得る(私はすべての場合に良いですか分からない);

#include <iostream> 
#include <string> 

class myClass{ 
public: 
    void method1(int run){ 
     std::cout << "Loaded method => " << run << std::endl; 
    } 
    void method2(int run){ 
     std::cout << "Loaded method => " << run << std::endl; 
    } 
    void _loadMethods(int method, int params){ 
     switch(method) { 
      case 1: 
       method1(params); 
       break; 
      case 2: 
       method2(params); 
      break; 
      default: 
       break; 
     } 
    } 
}; 

int main(){ 
    myClass mc; 
    std::string method; 

    method = "method2"; 

    if(method == "method1"){ 
     mc._loadMethods(1, 1); 
    } 
    if(method == "method2"){ 
     mc._loadMethods(2, 2); 
    } 
} 

感謝の

+0

マクロを使用してください。 – CinCout

+2

C!= C++。適切にタグ付けする。 – tambre

+3

私はこれを邪魔しなくてはなりません.CとC++は異なる言語です。さて、あなたの質問に答えるために、C++はリフレクションをサポートしていません。関数の名前をキーとして、関数ポインタを値 – Vanna

答えて

0

これは、 "生の" C++では不可能です。しかし...あなたが達成しようとしているのは、リフレクションまたはクラスのメタタイプ情報のようなものです。
このプロジェクトを見ることができます:http://www.axelmenzel.de/projects/coding/rttr、Qt:http://doc.qt.io/qt-5/qmetatype.html#detailsまたはgoogle for C++リフレクションを使用してください。

+1

変更された構文で、非常に可能です。あなたは足場を自分でやらなければなりません。 – StoryTeller

関連する問題