引数を開いたままメンバ関数をオブジェクトにバインドしようとしています。私はラムダ式(例えばthis)でラップすることでそれを行うことができますが、私はstd :: bindとstd :: placeholdersを使ってそれをやりたいC++でメンバ関数をオブジェクトにバインドする方法14
これまでのところ、これは私が持っているものです:>私はSTDを呼び出すときにplace_holdersのタプルを作成
template <size_t _Num>
struct place_holder {};
namespace std {
template <size_t _Num>
struct is_placeholder<::place_holder<_Num>> : integral_constant<size_t, _Num> {};
}
namespace _binding_helper_ {
template <size_t ... _Indices>
std::tuple<place_holder<_Indices>...> get_placeholders(std::index_sequence<_Indices...>) {
return std::make_tuple(place_holder<_Indices>()...);
}
}
template <typename _Obj, typename _Func, typename ... _Args>
std::function<_Func(_Args...)> bind_function_to_object
(_Func (_Obj::*func)(_Args...), _Obj & obj) {
return std::bind(func, obj,
_binding_helper_::get_placeholders(std::make_index_sequence<sizeof...(_Args)>{}));
}
が正常に動作しますが、:: < is_placeholder ::彼らはすべてしているタプルの要素の値私はどのようにしてplaceholderを初期化することができます< _Num> _Numのすべての必要な値の構造体をstd :: placeholdersとして初期化できますか?簡単な修正があることを願っています。どんな助けもありがたい。ありがとう!
あなたは、テンプレートをインスタンス化する方法のサンプルを表示することができます。 –
'is_placeholder'は' integral_constant 'ではなく、' integral_constant 'から継承する必要があります。 –
ildjarn
私は 'obj'の代わりに' std :: bind'に 'obj'のアドレスを渡したいと思うでしょう。 – Zack