0

コード内でcライブラリを使用していc++ます。彼らAPIは私が特定の署名で特定の関数ポインタを渡すことを要求します。次のようなものだとしましょう。

typedef int (*api_fun_t)(int);

私ができるようにしたいのは、実行時に決定される特定のパラメーターに依存する関数ポインターを渡すことです。最初に、次のようなものを定義することを考えました。

api_fun_t my_specialized_fun(int param){
    int fun(int x){
        // decide what to do based on param
    }
    return fun;
}

しかし、問題c++はネストされた関数定義を許可しません。次に、次のようなテンプレートを使用してこれを達成できると考えました

template <int param>
fun (int x){
    //decide what to do based on param
}

グローバルおよび/または静的変数を含まないこれを行う他の方法はありますか?

4

2 に答える 2

2

ネストされた関数の代わりにC++11ラムダを使用します。例えば:

typedef int (*api_fun_t)(int);

api_fun_t my_specialized_fun(int param){
   return [](int x) {x++; return x;};
}
于 2012-11-05T07:37:10.603 に答える
0

API を使用すると、ユーザー パラメーターを渡すことができ (適切に設計されたすべての C スタイルのコールバック API がそうであるように)、構造体を使用してデータを保持し、それへのポインターをパラメーターとして渡すことができると仮定します。その後、構造体のメンバー データを使用するか、必要に応じてメンバー関数を呼び出すことができます。構造体の寿命が十分に長いことを確認する必要があります。

API でユーザー パラメータを渡すことができない場合、唯一のオプションはグローバル変数であり、マルチスレッドが問題になる場合はスレッド ローカルです。そして、API の設計者に怒りのメールを書きます。

于 2012-11-05T09:55:18.453 に答える