前提・実現したいこと
C++で動的に関数が作れるのか気になり,関数を返す関数を作成していました.
そこでラムダ式をそのまま返す関数が作成できるのか気になり,質問させていただきました.
こんなプログラムが書きたい
C++
1#include <iostream> 2 3auto f(int n) { 4 if (n&1) 5 return [](int b){return b;}; 6 else 7 return [](int a){return a*a;}; 8} 9 10int main() { 11 std::cout << f(8)(9) << std::endl; 12}
発生している問題・エラーメッセージ
prog.cc:7:9: error: 'auto' in return type deduced as '(lambda at prog.cc:7:16)' here but deduced as '(lambda at prog.cc:5:16)' in earlier return statement return [](int a){return a*a;}; ^ 1 error generated.
プログラムを実行
どちらもキャプチャなし引数戻り値の型は同じラムダ式だと思うのですが,別の型だと認識されているようです.
試したこと
関数ポインタを返すようにすると一応は動きました.しかし後々キャプチャをできるようにしたいのでこのやり方は好ましくないです.
色々調べていくとstd::functionを使う方法を見つけたのでこれで実装しました.この実装方法だとキャプチャも可能で優れものだとは思うのですが速度の差が大きいようです.生成した関数をかなりたくさんの回数実行しようとしているのでこれは困ります.
動的に関数が作れるのであればキャプチャ的機能を使える必要はありますがラムダ式にもこだわりません.何かいい方法はないのでしょうか.
補足情報(FW/ツールのバージョンなど)
Wandbox clang HEAD 13.0.0 20210721 (experimental)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/01 14:17