#include <iostream> #include <typeinfo> #include <cxxabi.h> int main(int argc, char *argv[]) { auto f = [](int a) { return (a + 1) ^ 7;}; int status; std::cout << abi::__cxa_demangle((typeid (f)).name(), 0, 0, &status) << std::endl; auto g = [](int a, float b) { return ((a + 1) ^ 7) + b;}; std::cout << abi::__cxa_demangle((typeid (g)).name(), 0, 0, &status) << std::endl; auto h = [](int a, float b) { return ((a + 1) ^ 7) + b;}; std::cout << abi::__cxa_demangle((typeid (h)).name(), 0, 0, &status) << std::endl; std::cout << abi::__cxa_demangle((typeid (h(1,1.0f))).name(), 0, 0, &status) << std::endl; return 0; }
を実行して
main::{lambda(int)#1} main::{lambda(int, float)#2} main::{lambda(int, float)#3} float
が出力された.
とりあえず,宣言された場所+lambdaに引数が連なって,ついでに何番目に宣言されたかがくっつくと.なるほど.
- Newer: ことはじめ