2010-11-21 17 views
0

Hii、入力のデータ型を動的に受け入れる

私はこのアイデアを見つけたときにソートのための汎用関数を書いていました。通常はデータを与え、汎用の方法で記述された関数sortを呼び出します。ジェネリックを使用して、実行時に入力のデータ型を動的に受け入れることができるかどうか疑問に思っていました。

同様に、いくつかのデータを並べ替える場合、私たちは手前に与えられた入力のタイプを知らないのです。したがって、データ型の入力を動的に取り、ソートを実行する必要があります。

可能ですか????

+0

どの言語でですか? C、C++、Javaの答えは非常に異なるかもしれません。 –

+0

私は質問を理解しているかどうかわかりませんが、Java Array.sort(Object []、comparator)とは何ですか? –

+0

C/C++で実行できるかどうかを知りたいです。 – neelima

答えて

0

うん、ライブラリ内のthat

...前のソートアルゴリズムは、一般的にはかなり一般的なものですけれどものみ somebodyが持っていた場合。あなたはあなたのオブジェクトを比較する方法を彼らに伝える必要があります。我々はいくつかのデータをソートしたいと我々は知らない私たちはジェネリックを使用して、実行時に動的に入力のデータ型を受け入れることができれば、私は思っていた

0

...

....あなたの前に与えられた入力のタイプ...

いいえ、あなたはC++のテンプレートではできません。

C++テンプレートは、コード内の型を使用するコードがコンパイルされるまで、その型が指定されないようにする言語機能です。つまり、C++のテンプレートはのコンパイル時にというフィーチャーです。

コードがコンパイルされるまでにすべての型がわかっている場合は、C++テンプレートを使用できます。ソートの例では、ソートするデータの正確なタイプを知っていれば、the std::sort() functionのようなものを使用できます。

実行時までオブジェクトの正確なタイプを判別できない場合は、virtual関数による多型を使用する必要があります。あなたの並べ替えの例を使用して、あなたはこのような基本クラスを持っていることがあります。

class SortableInput 
{ 
public: 
    virtual bool IsLessThan(SortableInput& rhs) = 0; 
}; 

次に、あなたの異なったタイプがそれから派生することができます

class SortableItemA : public SortableInput 
{ 
public: 
    virtual bool IsLessThan(SortableInput& rhs) { /* */ } 
}; 

class SortableItemB : public SortableInput 
{ 
public: 
    virtual bool IsLessThan(SortableInput& rhs) { /* */ } 
}; 

// ... 

その後、あなたのソート機能はたったの約SortableInputを知っている必要があります。もちろん、SortableItemAと実際にSortableItemBを比較できるのは、このことだけです。

関連する問題