teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

refinement

2018/12/05 06:46

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > `DWORD(WINAPI *lambda_func)(void*)`
2
2
 
3
- (わかりづらいC/C++言語の文法ですが)この部分は「1つの引数`void*`をとって`DWORD`を返す関数へのポインタ型」変数`lambda_func`を宣言しています。(なお`WINAPI`部分は該当関数の呼出規約を表しています。)
3
+ (わかりづらいC/C++言語の文法ですが)この部分は「1つの引数`void*`をとって`DWORD`を返す関数へのポインタ型」変数`lambda_func`を宣言しています。`WINAPI`部分は該当関数の呼出規約を表しています。(呼出規約指定は標準C++の範囲外=コンパイラ独自の拡張です
4
4
 
5
5
  ですので、コード全体としては「1つの引数`void*`をとって`DWORD`を返すラムダ式」を定義し、同ラムダ式を関数ポインタヘ変換した結果(※)を、変数`lambda_func`として保持します。
6
6
 

1

update

2018/12/05 06:46

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  (わかりづらいC/C++言語の文法ですが)この部分は「1つの引数`void*`をとって`DWORD`を返す関数へのポインタ型」変数`lambda_func`を宣言しています。(なお`WINAPI`部分は該当関数の呼出規約を表しています。)
4
4
 
5
- ですので、コード全体としては「1つの引数`void*`をとって`DWORD`を返すラムダ式」を定義し、同ラムダ式を関数変換した結果(※)を、変数`lambda_func`として保持します。
5
+ ですので、コード全体としては「1つの引数`void*`をとって`DWORD`を返すラムダ式」を定義し、同ラムダ式を関数ポインタヘ変換した結果(※)を、変数`lambda_func`として保持します。
6
6
 
7
7
  ```C++
8
8
  DWORD(WINAPI *lambda_func)(void*) = [](void* pData) -> DWORD { /*...*/ };
9
9
  ```
10
10
 
11
- ※C++言語のラムダ式は、変数キャプチャを行わない場合(上記コードでは`[]`)に限って、関数ポインタ型へと暗黙に変換可能です。
11
+ ※C++言語のラムダ式は、変数キャプチャを行わない場合(上記コードでは`[]`)に限って、関数ポインタ型へと暗黙に変換可能です。[cpprefjpのラムダ式説明](https://cpprefjp.github.io/lang/cpp11/lambda_expressions.html#convert-to-function-pointers) もご参考に。