前提・実現したいこと
クラス型とスカラー値の混在するシーケンスを可変パラメータとして関数に渡したいのですが,その関数を2つ用意し条件に応じて使い分けを考えています。
例えば以下のコードですが,まず,funcBとfuncCはこの質問の本質部分ではなく,処理のスタブになります。テンプレートパラメータGは受け取る関数でg の処理結果をfuncC に渡して結果を表示します。
次に,funcAですが,funcBの第1引数にラムダ式を渡して,funcBから呼び出します。その際funcBの第2引数以下で渡したvectorと整数が混在したパラメータをfuncB内でラムダ式で処理して型に応じた結果を返します。funcAは期待通り動きます。
問題は,funcAAのように,異なる動作をする関数を2つ用意して条件に応じてfuncBに渡したいというものです。その方法としてstd::functionを考えたのですが,どのようにfunctionのテンプレートに渡すのかがわかりません。functionにこだわりはないので,他の方法でも良い方法があれば教えていただけませんでしょうか。多分テンプレートを渡すのかなと思ったのでタイトルはそのように書きました。
該当のソースコード
C++
1#include<function> 2using namespace std; 3 4template<typename ...Args> 5void funcC(Args...args){for(auto m:{args...})cout << m<< '\n';} 6 7template<typename G, typename ...Args> 8void funcB(G g,Args ...args ){ 9 funcC( g(args)...); 10} 11 12void funcA(){ 13 vector<int> v1,v2; 14 funcB([]( auto v){ 15 if constexpr(is_scalar_v<decltype(v)>) 16 return 100; 17 else return 1;},v1,v2,3); 18} 19 20int main(){ 21 funcA(); 22}
実現したいこと
C++
1void funcAA(bool sw){ 2 vector<int> v1,v2; 3 4 // function<int( ? )> f; 5 if( sw ) 6 f= []( auto v){ 7 if constexpr(is_scalar_v<decltype(v)>) 8 return 100; 9 else return 1;}; 10 else 11 f=[]( auto& v){return 1;}; 12 13 funcB(f,v1,v2,3); 14} 15int main(){ 16 funcAA(true); 17}
補足情報(FW/ツールのバージョンなど)
clang
C++17
回答1件
あなたの回答
tips
プレビュー