だから私は次のコードを持っています:
#include <iostream>
template <typename T>
class funcky
{
public:
funcky(char const* funcName, T func)
: name(funcName), myFunc(func)
{
}
//private:
char const* name;
T myFunc;
};
#if 0
int main(void)
{
char const* out = "nothing";
// requires template args
funcky test("hello", [&](int x, int y) -> int
{
out = "YES";
return x + y;
});
std::cout << test.name << " = " << test.myFunc(1, 2) << std::endl;
std::cout << test.name << " = " << out << std::endl;
return 0;
}
int main2(void)
{
funcky<void(*)(void)> test("hello", [&, this](void) -> void
{
std::cout << this->name << std::endl;
});
test.myFunc();
return 0;
}
#endif
int main(void)
{
char const* out = "nothing";
auto myFunc = [&](int x, int y) -> int
{
out = "YES";
return x + y;
};
funcky<decltype(myFunc)> test("hello", myFunc);
std::cout << test.name << " = " << test.myFunc(1, 2) << std::endl;
std::cout << test.name << " = " << out << std::endl;
return 0;
}
一番上のチャンクは、ラムダとその名前を保持する関数ホルダーです。
次はAPIに関して使用したいのですが、テンプレート引数が指定されていないため失敗します。
その後、特定のタイプ(funckyなど)の「this」を、その内部で宣言されていないラムダで使用できるかどうか疑問に思います。希望的観測。
最後に、コンパイルするが、funckyコンストラクターとdecltypeの外部でラムダを使用するコードがあります。
そのようなことはC++11で可能ですか?私はどのように言ったことを達成しますか?
また、同じAPIを使用できる場合を除いて、この方法で実行できないかのように、私が何をしているのかを推測しないようにしてください。簡単な方法で書き直します。努力する価値はありません。