私の仕事では多くのペアプログラミングを行っており、SINGLEタイプまたはその派生物のコンテナーのみを受け入れる関数を作成しましたが、同僚はコードレビューに失敗するのではないかと心配しています。より良い方法である:
これが署名です。Fruitクラスは、このスレッドのためだけにFruitに名前を変更した基本クラスです。
template <class Container>
typename enable_if<is_base_of<Fruit, typename remove_pointer<typename Container::value_type>::type>::value, void>::type
processFruits(container& fruits)
{
//process the elements and change them if needed. thats why no const
}
それが何をするか:voidを返し、そのコンテナであり、コンテナ内のタイプがフルーツであるか、フルーツから派生している場合、関数を有効にします。ポインターの「タイプ」を知る必要があるため、std :: remove_pointerも使用しました(コンテナーにはポインターが含まれている可能性があります)。
これは意図したとおりにコンパイルおよび動作しますが、私が言ったように、それを行うための最良の方法はわかりません。冗長すぎるようで、コードレビューが途切れる可能性があります。
編集:これはテンプレート化されたクラスも受け入れます。コンテナである必要はありません。STLコンテナのみを受け入れるように制限する方法はありますか?
別のアイデアはありますか、それともそれがそうであるようにそれは大丈夫ですか?前もって感謝します。