この「関数ポインタへの変換メンバ関数を持つクラス」というのは具体的にコードにするとどのようなものでしょうか。
例えば下記ソースコードのようになります:
C++
1#include <iostream>
2
3// 関数(int -> int)
4int twice(int a) { return a * 2; }
5
6// 関数ポインタ(int -> int)
7using ConvFuncPtr = int(*)(int);
8
9// 関数ポインタへの変換メンバ関数を持つクラス
10class X {
11public:
12 // 関数ポインタへの変換メンバ関数
13 operator ConvFuncPtr() const {
14 return &twice;
15 }
16};
17
18int main()
19{
20 X obj;
21
22 int result = obj(21);
23 std::cout << result; // 42
24}
この「関数ポインタへの変換メンバ関数を持つクラスのオブジェクト」とはどんな使い方をするものですか?
有用な使い方は思いつきませんでした。明示的にこのようなコードを書くケースは稀だと思います。
追記:これは surrogate call function と呼ばれる機能で、C++11でラムダ式が導入されるより前のC++03時代から存在する機能のようです(全然知らなんだ)。こちらの解説記事 で説明があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/16 04:03