0

スピードアップを計算するためにさまざまなアルゴリズムをテストしたい (シングルコア、cuda、マルチコア)。関数ヘッダーは次のようになります。

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

常に同じデータを初期化しなければならないので、関数ポインタを呼び出す関数を 1 つ書きたいと思います。

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では問題ありませんが、マルチコアでは問題に取り組んでいるスレッドの量を変更できるようにしたいので、マルチコア関数にはもう1つの引数があります:

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");

しかし、他の引数が設定されていないため、エラーが発生しました。どうすればよいですか? ・ブーストライブラリも登場!

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その3つの引数をfraktale_cpu_multi()2番目、3番目、および4番目の引数としてに転送する関数オブジェクトを返します。

于 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 に答える