我被困在專業的模板功能拉姆達:模板專門用於傳遞拉姆達
class X
{
public:
template <typename T>
void f(T t)
{
std::cout << "awesome" << std::endl;
};
template <>
void f(double t)
{
std::cout << "trouble" << std::endl; // Works
}
template <>
void f(??? t) // what to put here?
{
std::cout << "lambda" << std::endl;
}
};
X x;
x.f(42); // prints "awesome"
x.f(1.12); // prints "trouble"
x.f([](){ std::cout << "my lazy lambda" << std::endl; }); // should print "lambda"
傳遞給F和專門爲這種類型的作品前,鑄造拉姆達爲std ::功能,但單調乏味的寫作。 C++ 0x中有解決方案嗎?
編輯:我對解決方案完全沒問題,如果傳遞lambda表達式的最後一行可以使我專門爲可調用的方法。
相關:http://stackoverflow.com/questions/4731947 /超載-ON-stdfunction – stijn
因此,答案似乎是:沒有,是C++ 0x中沒有辦法避免的演員和專業的模板匹配lambda表達式。 –
如之前討論過(http://stackoverflow.com/questions/4661875/is-ac-is-lambda-trait-purely-implemented-as-a-library-impossible),這是不可能從其他區分lambda函數可調用對象 –