Hii、入力のデータ型を動的に受け入れる
私はこのアイデアを見つけたときにソートのための汎用関数を書いていました。通常はデータを与え、汎用の方法で記述された関数sortを呼び出します。ジェネリックを使用して、実行時に入力のデータ型を動的に受け入れることができるかどうか疑問に思っていました。
同様に、いくつかのデータを並べ替える場合、私たちは手前に与えられた入力のタイプを知らないのです。したがって、データ型の入力を動的に取り、ソートを実行する必要があります。
可能ですか????
Hii、入力のデータ型を動的に受け入れる
私はこのアイデアを見つけたときにソートのための汎用関数を書いていました。通常はデータを与え、汎用の方法で記述された関数sortを呼び出します。ジェネリックを使用して、実行時に入力のデータ型を動的に受け入れることができるかどうか疑問に思っていました。
同様に、いくつかのデータを並べ替える場合、私たちは手前に与えられた入力のタイプを知らないのです。したがって、データ型の入力を動的に取り、ソートを実行する必要があります。
可能ですか????
...
....あなたの前に与えられた入力のタイプ...
いいえ、あなたは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
を比較できるのは、このことだけです。
どの言語でですか? C、C++、Javaの答えは非常に異なるかもしれません。 –
私は質問を理解しているかどうかわかりませんが、Java Array.sort(Object []、comparator)とは何ですか? –
C/C++で実行できるかどうかを知りたいです。 – neelima