2016-12-28 19 views
-5

ヒープデータ構造を学習していました。ヒープには2種類のタイプがあるため、選択肢をユーザーに提供したいと考えました。私は挿入、トラバース、検索などのオプションを提供する通常のプログラムを作っています。変数を使用して関数を呼び出すにはどうすればよいですか?

両方のヒープに挿入するために、min_insert()とmax_insert()という2つの関数を作成しました。私は、コードの2つの設定を記述する必要はありませんように、変数に私の機能を割り当てたい

class MinHeap{ 
Node *root; 
int choice; 
void min_insert(); 
void max_insert(); 
public: 
    Heap(){ 
     root = NULL; 
     cout << "Do you want\n1.Max Heap\n2.Min Heap"; 
     } 
}; 

、ケース1のための1とケース2

説明のために1: 私が行っていた方法

Heap(){ 
    root = NULL; 
    cout << "Do you want\n1.Max Heap\n2.Min Heap"; 
    cin >> choice; 
    if(choice == 1){ 
     cout << "1.INSERT\2.SEARCH\n3.TRAVERSAL"; 
     cin >> innerChoice; 
     switch(innerChoice){ 
      case1: max_insert() ;break; 
      case2: search();break; 
      case3:traversal();break; 
     } 

    } 
    else{ 
     cout << "1.INSERT\2.SEARCH\n3.TRAVERSAL"; 
     cin >> innerChoice; 
     switch(innerChoice){ 
      case1: min_insert() ;break; 
      case2: search();break; 
      case3:traversal();break; 
     } 

    } 

} 

私は何をしたい:

Heap(){ 
     root = NULL; 
     cout << "Do you want\n1.Max Heap\n2.Min Heap"; 
     cin >> choice; 

     if(choice == 1){ 
     function_variable = max_insert();  
     }else{ 
      function_variable = min_insert(); 
     } 
      cout << "1.INSERT\2.SEARCH\n3.TRAVERSAL"; 
      cin >> choice; 
      switch(choice){ 
       case1: function_variable ;break; 
       case2: search();break; 
       case3:traversal();break; 
      } 

    } 

私は何をすべきコードを書くには?

+1

私はこれが最善の方法であるとは確信していないが、少なくともあなたが尋ねていることをする方法を知っているので、['std :: function '](http://en.cppreference.com/w/cpp/utility/functional/function)。同じインターフェイスを実装する2つの異なるクラスについて話している場合、継承を使用することができます。 – BoBTFish

答えて

0

メンバ関数へのポインタを使用して、必要な間接指定を行うことができます。部材へ

void (MinHeap::* pFunc)() = &MinHeap::max_insert; 

MinHeap obj; 
(obj.*pFunc)(); 

または、クラス内部

(this->*pFunc)(); 

ポインタは、クラスのメンバを参照して、クラスの型結果のオブジェクトに適用されるときに、セレクタの一種です。メンバ関数の場合、それらを呼び出すことができます。

0

関数ポインタは正しい方法です:)。私は関数ポインタの配列で行く..

関連する問題