- 826 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:24:55 ]
- そろそろ移動するべきかなぁと思ったのでこっちで。
【C++】STL(Standard Template Library)相談室 8 pc11.2ch.net/test/read.cgi/tech/1198435319/843 でオーバーロード面倒という声があったけど、場合によってはこんな風にできるかも。 Widget func(const Widget&, const Widget&, const Widget&); // move しない // helper 実際には Variadic template 化? template<typename T0, typename T1, typename T2> Widget&& select(T0&& t0, T1&& t1, T2&& t2, std::enable_if<!std::lvalue_reference<T0>::value || !std::lvalue_reference<T1>::value || !std::lvalue_reference<T2>::value>>::type *dummy = 0) { return !std::is_lvalue_reference<T0>::value ? std::move(t0) : !std::is_lvalue_reference<T1>::value ? std::move(t1) : std::move(t2); } template<typename T0, typename T1, typename T2> Widget&& func(T0&& t0, T1&& t1, T2&& t2) { Widget& w = select(std::forward<T0>(t0), std::forward<T1>(t1), std::forward<T2>(t2)); // w に対する処理 return std::move(w); } あんま自信ないけどどうだろ?
|

|