基本上我想这样做: 我可以使用lambda函数或std :: function对象代替函数指针吗?
显然,对于期望函数指针的函数来说,现在是不可能的.但是,它适用于需要仿函数的函数(我之前使用过stl的sort()函数)
但是,我不知道如何编写一个以仿函数为参数的函数!
任何人?
我试图使用lambda代替函数指针,但VS2010似乎无法转换它.我试过像这样使用std :: function它崩溃了,我不知道我这样做是否合适!
#include <windows.h>
#include <conio.h>
#include <functional>
#include <iostream>
#include <concrt.h>
void main()
{
std::function<void(void*)> f = [](void*) -> void
{
std::cout << "Hello\n";
};
Concurrency::CurrentScheduler::ScheduleTask(f.target<void(void*)>(), 0);
getch();
}
Run Code Online (Sandbox Code Playgroud)
对我来说,编译器无法将这样的lambda转换为简单的函数指针,因为它没有捕获任何变量 - 我也不知道该怎么办.
每个lambda的类型是唯一的吗?所以我可以使用lambdas'类型作为模板参数来模拟一个模板函数,以生成一个可以被调用的独特静态函数,并希望优化出来?
更新
以下似乎工作,但它是否安全?
#include <windows.h>
#include <conio.h>
#include <iostream>
#include <concrt.h>
template<typename Signature>
struct Bind
{
static Signature method;
static void Call(void* parameter)
{
method(parameter);
}
};
template<typename Signature>
Signature Bind<Signature>::method;
template<typename Signature>
void ScheduleTask(Signature method)
{
Bind<Signature>::method = method;
Concurrency::CurrentScheduler::ScheduleTask(&Bind<Signature>::Call,0);
}
void main()
{
ScheduleTask …Run Code Online (Sandbox Code Playgroud)