相关疑难解决方法(0)

如何编写一个以仿函数为参数的函数

基本上我想这样做: 我可以使用lambda函数或std :: function对象代替函数指针吗?

显然,对于期望函数指针的函数来说,现在是不可能的.但是,它适用于需要仿函数的函数(我之前使用过stl的sort()函数)

但是,我不知道如何编写一个以仿函数为参数的函数!

任何人?

c++ visual-studio-2010

16
推荐指数
3
解决办法
1万
查看次数

C++ 0x Lambda到VS 2010中的函数指针

我试图使用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)

c++ lambda visual-studio-2010 c++11

10
推荐指数
1
解决办法
8022
查看次数

标签 统计

c++ ×2

visual-studio-2010 ×2

c++11 ×1

lambda ×1