回答編集履歴
1
add link
answer
CHANGED
@@ -4,11 +4,11 @@
|
|
4
4
|
|
5
5
|
> std::functionを使えばできるのでしょうか・・・?
|
6
6
|
|
7
|
-
`std::function`では実装不可能です。`std::function<R(Args...)>`のように戻り値型`R`と引数リスト`Args...`を明示する必要があるため、「引数や戻り値が異なる関数ポインタ」を同
|
7
|
+
[`std::function`クラステンプレート](https://cpprefjp.github.io/reference/functional/function.html)では実装不可能です。`std::function<R(Args...)>`のように戻り値型`R`と引数型リスト`Args...`を明示する必要があるため、「引数や戻り値が異なる関数ポインタ」を同一`std::function`型で扱えません。
|
8
8
|
|
9
9
|
----
|
10
10
|
|
11
|
-
一応、どんなデータ型(任意の関数ポインタも含む)でも扱える`std::any`を使った実装コード
|
11
|
+
一応、どんなデータ型(任意の関数ポインタも含む)でも扱える[`std::any`クラス](https://cpprefjp.github.io/reference/any/any.html)を使った実装コードの例を示します。呼び出し側では格納した型(`FUNCPTR1`や`FUNCPTR2`)を明示する必要があります。不一致の場合は、`std::bad_any_cast`例外がスローされます。
|
12
12
|
|
13
13
|
Demo: [https://wandbox.org/permlink/reO9fTJ9jkV1O4dr](https://wandbox.org/permlink/reO9fTJ9jkV1O4dr)
|
14
14
|
|