Visual Studio 11 Beta にて:
#include <iostream>
#include <locale>
#include <Windows.h>
using namespace std;
int main() {
wcout.imbue(locale("japanese"));
// EnumWindows に与える CALLBACK に stateless lambda を。
EnumWindows([](HWND hWnd, LPARAM lParam)->BOOL {
TCHAR buf[256];
GetWindowText(hWnd, buf, 256);
if ( buf[0] != L'\0' ) {
*reinterpret_cast<wostream*>(lParam) << buf << endl;
}
return TRUE;
},
reinterpret_cast<LPARAM>(&wcout));
}
あらおもしろい。stateless lambda を Win32-callback に使えるのね。
ふしぎねー、コンパイラくんてば __cdecl か __stdcall かを判別して
善きに計らってくれちゃうのね。