前提・実現したいこと
オブジェクトとそのメンバへのオフセットを、メンバ関数への引数をとるラムダ式に固めたいです。ですが、コンパイルが通りません。・゚゚・(>д<;)・゚゚・。 なぜなんでしょうか...どなたか教えてください!!
発生している問題・エラーメッセージ
clang 8.0.0 でのエラーメッセージです...
prog.cc:21:20: error: call to pointer to member function of type 'int (int)' drops 'const' qualifier return (obj.*f)(std::forward<decltype(args)>(args)...); ^ prog.cc:33:42: note: in instantiation of function template specialization 'mem_fun_wrap(int (s::*&&)(int), s &)::(anonymous class)::operator()<int>' requested here std::cout << mem_fun_wrap(&s::f, sss)(12); ^ 1 error generated.
該当のソースコード
cpp
1 2#include <iostream> 3#include <type_traits> 4 5template 6< 7 typename Ret, 8 typename C, 9 typename Obj, 10 typename ... Args 11> 12auto mem_fun_wrap(Ret(C::* && f)(Args...), Obj && obj) 13{ 14 return 15 [ 16 f = std::forward<decltype(f)>(f), 17 obj = std::forward<decltype(obj)>(obj) 18 ] 19 (auto && ... args) 20 { 21 return (obj.*f)(std::forward<decltype(args)>(args)...); 22 }; 23} 24 25struct s 26{ 27 int f(int i) { return i * i; } 28}; 29 30int main() 31{ 32 s sss; 33 std::cout << mem_fun_wrap(&s::f, sss)(12); 34} 35
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/17 13:45