0

我想测试不同的算法来计算加速(单核、cuda、多核)。函数头如下所示:

void fraktale_cpu_single(pfc::bitmap * bmp,
                         pfc::RGB_3_t * color_table,
                         const par::complex<float> C)

我总是要初始化相同的数据,所以我想写一个函数来调用函数指针。

void do_function_with_pic(
    std::function<void(pfc::bitmap * bmp,
                       pfc::RGB_3_t * color_table,
                       const par::complex<float> C)> Func,
    const string pic_name)

在单核和 cuda 中没问题,在多核中我希望能够更改正在解决问题的线程数量,所以我的多核函数还有一个参数:

void fraktale_cpu_multi(size_t threads,
                        pfc::bitmap * bmp,
                        pfc::RGB_3_t * color_table,
                        const par::complex<float> C)

我正在尝试这个:

do_function_with_pic(bind(fraktale_cpu_multi, 1), "cpu_multi.bmp");

但我得到一个错误,因为没有设置其他参数,我该怎么办?- 也可以使用 Boost 库!

4

2 回答 2

4

您必须为函数的其余参数使用占位符:

#include <functional>

using std::bind;
using namespace std::placeholders; // Namespace for _1, _2, ...

do_function_with_pic(bind(fraktale_cpu_multi, 1, _1, _2, _3), "cpu_multi.bmp");

std::bindfraktale_cpu_multi()将返回一个函数对象,该对象在第一个参数设置为 的情况下调用您的函数1,并将其三个参数fraktale_cpu_multi()作为第二个、第三个和第四个参数转发给。

于 2013-02-15T14:11:35.123 回答
1

你需要这样的东西:

#include <functional>

std::bind(fraktale_cpu_multi, 1,
          std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)
于 2013-02-15T14:11:27.733 回答