質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2506閲覧

C++のstd::functionを受け取る関数の定義で、複数の引数を受け取るstd::functionを指定したい

cellcrafty

総合スコア2

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2021/12/23 16:09

質問

関数の引数として関数を渡すためにstd::function

C++

1using namespace std; 2int fun(function<int(int)> inFun){ 3 return inFun(3); 4}

という風に使えると思うのですが、複数の引数に対応した形で

C++

1using namespace std; 2int fun(function<int,int(int)> inFun){ 3 return inFun(3,3); 4}

という風に書くとエラーが出ます。
C++日本語リファレンスや個人のブログ等で調べましたが、引数が1つのサンプルしかなく解決策を得られませんでした。
初歩的な質問で恐縮ですが、二つの引数を取る関数を引数として取る方法をご教示いただけますと幸いです。

コード全体

引数が1つの場合

C++:aiue.cpp

1#include<functional> 2using namespace std; 3int fun(function<int(int)> inFun){ 4 return inFun(3); 5} 6int num(int x){ 7 return x; 8} 9int main(){ 10 fun(num); 11} 12//エラー無し

引数が2つの場合

C++:aiue.cpp

1#include<functional> 2using namespace std; 3int fun(function<int,int(int)> inFun){ 4 return inFun(3,3); 5} 6int sum(int x,int y){ 7 return x+y; 8} 9int main(){ 10 fun(sum); 11} 12//コンパイルエラー

######エラーメッセージ

aiue.cpp:3:30: error: wrong number of template arguments (2, should be 1) 3 | int fun(function<int,int(int)> inFun){ | ^ In file included from /usr/include/c++/9/functional:59, from aiue.cpp:1: /usr/include/c++/9/bits/std_function.h:128:11: note: provided for ‘template<class _Signature> class std::function’ 128 | class function; | ^~~~~~~~ aiue.cpp: In function ‘int fun(int)’: aiue.cpp:4:21: error: ‘inFun’ cannot be used as a function 4 | return inFun(3,3); | ^ aiue.cpp: In function ‘int main()’: aiue.cpp:10:9: error: invalid conversion from ‘int (*)(int, int)’ to ‘int’ [-fpermissive] 10 | fun(sum); | ^~~ | | | int (*)(int, int) aiue.cpp:3:32: note: initializing argument 1 of ‘int fun(int)’ 3 | int fun(function<int,int(int)> inFun){ | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~

######環境
Windows 10
Ubuntu 20.04 LTS on WSL2
gcc 9.3.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C++

1#include<functional> 2using namespace std; 3 4int fun(function<int(int,int)> inFun){ 5 return inFun(3,3); 6} 7int sum(int x,int y){ 8 return x+y; 9} 10int main(){ 11 fun(sum); 12}

投稿2021/12/23 17:55

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cellcrafty

2021/12/24 00:28 編集

ご回答ありがとうございます。 関数の型を書けば良いのですね。 助かりました……。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問