からのジェネリックデータ型STL
または独自に実装されたジェネリッククラスを使用する場合、データ型を指定しないオプションがありますか... ???
例:
グラフライブラリを作成している場合....そのライブラリを使用している人は、ノードにデータを保存したい場合があり、ノード間の接続にのみ関心がある場合があります。
したがって、ジェネリックライブラリを提供するために、いくつかのデータ変数を配置します。
template <class T>
class Graph
{
T data[number_of_nodes]; // This somehow corresponds to data stored in each node
Edge e[number_of_edges];
}
いいえ、データ変数がまったく必要ない場合はどうすればよいですか...?
プレーン配列をクラスでラップさせた場合、voidを明示的に特殊化して、追加のバイトを1バイトだけ支払うことができます。
template<int N, class T>
class array {
T v[N];
const T &operator[](int i) const { return v[i]; }
T &operator[](int i) { return v[i]; }
};
template<int N>
class array<N,void> {
const void operator[](int &i) const { }
void operator[](int &i) { }
};
int main()
cout<<sizeof(array<100,int>)<<endl;
cout<<sizeof(array<100,void>)<<endl;
}
代わりにGraphクラスを特殊化することもできますが、配列ラッパーのみを特殊化する方が作業が少ないと思います。
とにかく、最良のアイデアは、ノードをグラフのジェネリック型にし、追加データなしで基本ノード実装を提供し、「500-内部サーバーエラー」で提案されているように、ユーザーが独自の派生ノード型を定義できるようにすることです。グラフ内のノードについて他に何も保存する必要はありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加