一部のC++ 11/14コードでセマンティクス(C++ 17ではstd::invoke
で実装)を使用する必要があります。私は確かに自分自身を実装したくはありません。私はそれが災害であると信じています。そこで、私は現在の標準ライブラリ施設を利用することに決めました。すぐに私の心に来た:C++ 11/14 INVOKE回避策
template<typename Fn, typename... Args>
constexpr decltype(auto) my_invoke(Fn&& f, Args&&... args)
noexcept(noexcept(std::bind(std::forward<Fn>(f), std::forward<Args>(args)...)()))
{
return std::bind(std::forward<Fn>(f), std::forward<Args>(args)...)();
}
この実装に問題がoperator()() &
とoperator()() &&
上の関数オブジェクトのオーバーロード、唯一&&
バージョンが今までになります場合には、例えば(左辺値と右辺値呼び出し可能オブジェクトを区別することはできませんですと呼ばれる)。呼び出し可能なものを完全に転送するライブラリユーティリティはありますか?そうでない場合、それを実装するにはどうすればよいでしょうか? (たとえば、転送ラッパー)。
[cppreference](http://en.cppreference.com/w/cpp/utility/functional/invoke)のサンプル実装を参照してください。いくつかのC++ 17の機能を使用するかもしれませんが、おそらくC++で動作するように変更することができます。11/14 – Mankarse