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

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

新規登録して質問してみよう
ただいま回答率
85.48%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

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

Q&A

解決済

1回答

975閲覧

C++ 関数の引数で関数を受け取り実行する方法

mjk

総合スコア303

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

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

0グッド

0クリップ

投稿2022/12/04 09:49

実現したいこと

①関数testの引数として、
②関数f1又は関数f2を受け取り、
③実行したい

試したこと

・質問タイトルの内容で検索してヒットしたサイトの説明を読んで、
自分なりに試してみたのですが関数の実行の仕方が分かりませんでした。
【C++】関数を引数に渡す色々な方法【STL テンプレート 関数ポインタ】

・引数として受け取れているような気がするのですが関数の実行が出来ません。

・warningが出ているのですが検索してもよく分かりませんでした。

warning

1/qa2.cpp: In instantiation of ‘int test(T) [with T = int (*)()]’: 2/QA/qa2.cpp:23:12: required from here 3/QA/qa2.cpp:16:5: warning: statement has no effect [-Wunused-value] 4 16 | fn; //実際の処理をする関数 5 | ^~ 6 * ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。

コード

C++

1#include <bits/stdc++.h> 2using namespace std; 3 4int f1() { 5 cout << "f1" << '\n'; 6 return 0; 7} 8int f2() { 9 cout << "f2" << '\n'; 10 return 0; 11} 12 13template <typename T> int test(T fn) { 14 cout << "test:start" << '\n'; //計測開始 15 16 fn; //実際の処理をする関数 17 18 cout << "test:end" << '\n'; //計測終了 19 return 0; 20} 21 22int main() { 23 test(f1); 24 test(f2); 25}

out

1//現状の出力 2test:start 3test:end 4test:start 5test:end

out

1//期待する出力 2test:start 3f1 4test:end 5test:start 6f2 7test:end

補足情報(FW/ツールのバージョンなど)

Ubuntu 20.04 LTS
WSL2
VSCode 1.73.1
Windows10 22H2 19045.2251
C++17
g++ 9.4.0
gdb

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

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

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

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

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

dameo

2022/12/04 10:26

fn()としないと何もしないよって警告です。
mjk

2022/12/04 10:36

ありがとうございます。 解決しました。 その内容で回答して頂けるとBA出来るので助かります。
dameo

2022/12/04 10:43

ご自分でちゃんと調べて自己解決とするか、時間がなければこのままでもいいかと。
mjk

2022/12/04 10:46

了解です。質問をクローズしたいので後ほど自己解決で投稿しておきます。
guest

回答1

0

自己解決

解決

dameo 2022/12/04 19:26
fn()としないと何もしないよって警告です。

C++

1template <typename T> int test(T fn) { 2 cout << "test:start" << '\n'; //計測開始 3 4 // fn; ←間違っていた箇所 5 6 fn(); //実際の処理をする関数 7 8 cout << "test:end" << '\n'; //計測終了 9 return 0; 10}

参考

改めてエラーで検索していたら
今回の質問のような書き方でエラーが出ることを説明しているサイトがありました。

warning: statement with no effect

warning: statement with no effect
警告:何の効果も無い式や文
無効式はエラーにならない

投稿2022/12/04 11:02

mjk

総合スコア303

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

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

mjk

2022/12/04 11:05 編集

質問へコメントして頂いた内容で解決しましたので、 そのまま引用させて頂き自己解決とさせて頂きました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問