はのは、私は別の引数の数と、機能のかなり大量に持っているとしましょう。関数ポインタ、デザイン
POQ:私は彼らのパラメータ数を含め、正確な機能を知らなくても、それらを操作できるように
int print_one(int x)
{
printf("one: %d\n", x);
return 1;
}
int print_three(int x, int y, int z)
{
printf("three: %d-%d-%d\n", x, y, z);
return 3;
}
は今、私は、構造中にこれらの機能にいくつかのプロパティを接続したい(私も呼ぶかもしれません構造・インターフェース)
私はこの、(&私はかなり間違っていると思う)のようにそれをtryd:私はこのsolutiを見つける
typedef int (*pfunc)(int c, ...);
typedef struct _stroffunc
{
pfunc myfunction;
int flags;
int some_thing_count;
int arguments[10];
int argumentcount;
} stroffunc;
int main()
{
stroffunc firststruct;
firststruct.pfunc = (pfunc) print_two;
firststruct.something_count = 101;
arguments[0] = 102;
argumentcount = 1;
flag &= SOME_SEXY_FLAG;
// now I can call it, in a pretty ugly way ... however I want (with patially random results ofc)
firststruct.pfunc(firststruct.arguments[0]);
firststruct.pfunc(firststruct.arguments[0], 124, 11);
firststruct.pfunc(1, firststruct.arguments[0], 124, 1, 1);
}
非常に醜い、&私は(希望)より良い解決策は、&を呼び出して、関数のポインタを設定すると思います。
私はこのコードをコンパイルしませんでしたが、私は&をコンバートしてコンセプトが動作するようにしました。 注:純粋なCが必要です
variadic関数ポインタにキャストし、それを介して関数を呼び出すと、未定義の動作が発生します。まず、variadic関数への引数は、*デフォルトの引数のプロモーション*を受けることを思い出してください。*これは本当にうまくいくでしょう。 –