所以我有以下代码:
#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;
}
顶部块是一个函数持有者,其中包含一个 lambda 和一个名称。
接下来是我想在 API 方面使用的,但由于没有指定模板参数而失败。
之后,我想知道是否可以在未在其中声明的 lambda 中使用特定类型(例如 funcky)的“this”。妄想。
最后是编译但在 funcky 构造函数和 decltype 之外使用 lambda 的代码。
在 C++11 中这样的事情是可能的吗?我如何完成所说的事情?
此外,除非它可以具有相同的 API,否则尽量不要猜测我在做什么,就好像我不能那样做,我只会用更简单的方式重写它。这不值得努力。