我想测试不同的算法来计算加速(singlecore,cuda,multicore)。函数标题如下所示:
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 lib也可用!
答案 0 :(得分: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::bind
将返回一个函数对象,该对象调用您的fraktale_cpu_multi()
函数,第一个参数设置为1
,并将其三个参数转发给fraktale_cpu_multi()
作为第二个参数,第3和第4个论点。
答案 1 :(得分:1)
你需要这样的东西:
#include <functional>
std::bind(fraktale_cpu_multi, 1,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)