所以我有以下代碼:C++ 11 LAMBDA模板Infering
#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方式,但由於沒有指定模板參數而失敗。
之後,我想知道是否可以在未聲明的lambda中使用特定類型的「this」(例如funcky)。妄想。
最終的代碼是編譯但在funcky構造函數和decltype之外使用lambda的代碼。
在C++ 11中可以這樣做嗎?我如何完成所說的事情?
另外,除非它可以具有相同的API,儘量不要猜測我在做什麼,就好像我不能這樣做,我只會以更簡單的方式重寫它。這是不值得的努力。
啊,所以沒有辦法獲得兩全其美,並且讓Signature隱含或者從lambda算起? – Jookia
@Jookia不,這不會發生。你應該考慮可卡因而不是拉姆達斯。蘭姆達什在任何方面都不是特別的。 'struct try_to_deduce_a_signature_for_this_one {template void f(T); };' –
啊。即使decltype? – Jookia