4
関数の引数に与えられた型のを持つラムダを取るクラスメンバ関数を書いています。私の質問です:議論の変更可能性に基づいてコンパイル時にメンバー関数をオーバーロードすることは可能ですか?以下は例です:可変/不変ラムダのコンパイル時のスイッチ
// T is a given type for class.
template <typename T>
class Wrapper {
T _t;
// For T&
template <typename F, typename R = std::result_of_t<F(T&)>>
std::enable_if_t<std::is_same<R, void>::value> operator()(F&& f) {
f(_t);
}
// For const T&
template <typename F, typename R = std::result_of_t<F(const T&)>>
std::enable_if_t<std::is_same<R, void>::value> operator()(F&& f) const {
f(_t);
}
};
だから、私が欲しいのは所与のラムダは、次の署名がある場合、最初のオペレータが呼び出されるべきです。
定数引数の場合は、2番目の引数を呼び出す必要があります。
[](const T&) {
}
うーんを
それは、最小限、実施例に従います。これは良いようです。しかし、どのように私は与えられたラムダからの戻り値の型でこの操作をオーバーロードするのですか?与えられたfはvoidだけでなく、独自の戻り値型を持つことができます。 – Jes
@Jesが更新されました。戻り値の型が導出されるようになりました。 – skypjack
ありがとう!それを消化させてください。 – Jes