私はこの興味深いスレッドを見ていた: https://stackoverflow.com/a/16596463/2436175テンプレートテンプレートパラメータとコンテナとデフォルトアロケータ:宣言をよりコンパクトにすることはできますか?
私の特定のケースの懸念は、OpenCVのからSTD CVのコンテナ:: Point_のとCV :: Rect_を使用してテンプレート関数を宣言します。 私は反対テンプレートたい:
- 私はCVの定義を完了するために
- 基本データ型を使用するのstdコンテナの種類を:: Point_のと品種を:: Rect_
私は終わりました
template <typename T, template <typename, typename> class Container_t>
void CreateRects(const Container_t<cv::Point_<T>,std::allocator<cv::Point_<T> > >& points,
const T value,
Container_t<cv::Rect_<T>,std::allocator<cv::Rect_<T> > >& rects) {
}
これで罰金コンパイル:
次のように宣言してアップ0void dummy() {
const std::vector<cv::Point_<double> > points;
std::vector<cv::Rect_<double> > rects;
CreateRects(points,5.0,rects);
}
(私も、私はまた、例えば、使用することができますCreateRects<double>(points,5,rects)
を見てきました)
、例えば私の宣言はよりコンパクトにするどのような方法が存在した場合、私は思っていましたデフォルトのアロケータの2倍を指定する必要はありません。
template <typename T, class C1, class C2>
void CreateRects(const C1& points,
const T value,
C2& rects) {
}
それは、読みやすいですコンパイルし、タイプが一致していない場合、あなたはコンパイルエラーを取得します:程度のような簡単なコードで何が起こっている
を宣言をコンパクトにする?パフォーマンスの向上はなく、ビルド中に累積された時間が節約され、StackOverflowにポストすることによって無駄になっています。 –
@ThomasMatthewsもし私が何らかの形で可読性を向上させることができれば、後で自分のコードを処理しなければならない人(自分でさえ)に時間を節約するかもしれません。しかし、あなたにはポイントがあります。時には私は面白いと思ったので質問しましたが、必ずしもすぐに役立つとは限りません。 – Antonio