5
C++ 11で導入された型安全な可変関数を使用したいが、異なる型では使用しない。 例:同じ型のパラメータを持つ型安全な可変関数
template<typename T>
T maxv(T first, T second) {
return first > second ? first : second;
}
template<typename T, typename ... Rest>
T maxv(T first, T second, T ... rest) {
return maxv(first, maxv(second, rest));
}
すべてのパラメータの種類が同じであるので、そのような何か書くこと多分可能です:
struct Point { int x,y; };
template<>
Point maxv(Point first, Point second) {
return first.x > second.x ? first : second;
}
maxv({1, 2}, {3, 4}); // no problem
maxv({1, 2}, {3, 4}, {5, 6}); // compile error
それはmingwのG ++ 4.5でこのエラーでコンパイルしました:
error: no matching function for call to 'maxv(<brace-enclosed initializer list>, <brace-enclosed initializer list>, <brace-enclosed initializer list>)'
彼は{5, 6}
がタイプPoint
であることを知りませんので。解決策は何ですか?
してください/ var/variadic/ –
あなたのデータは本当に 'max_element'のようなものが適切でない複数の非集約変数に格納されていますか? –
関数を特殊化しないでください。代わりに述語を渡してください。 – Xeo