は私がしているポインタ 罪である文字列へのポイント、COS、POW、ログインするか、expのかどうかを確認することができます方法はありますmath.hヘッダーファイルの一部ですか?
異なる数学を文字列の一致に基づいて呼び出すとします。
あなたはこれを達成するために次のようなデータ構造のようなものを使用することができます。そして、あなたはnfunctionsなしをマッピングするためのデータ構造を作成することができ
// Make a generic function pointer, since no. of arguments differs
typedef double (*genericfptr)();
struct FunMap
{
const char* funName;
genericfptr fptr;
unsigned int nargs;
};
// Following could be used to get correct compatible types
typedef double (*OneArg)(double);
typedef double (*TwoArg)(double , double);
を。以下のような引数の:この機能マップテーブルを使用して
struct FunMap fMap[ ] =
{
{ "sin", sin, 1 },
{ "cos", cos, 1 },
{ "log", log, 1 },
{ "pow", pow, 2 },
// ....
};
あなたは私たちの文字列一致に基づいて関数を呼び出すことができます。
if(strcmp(p, fMap[ j ].funName) == 0)
{
switch(fMap[ j ].nargs)
{
case 1:
result = ((OneArg)fMap[ j ].fptr)(val1);
break;
case 2:
result = ((TwoArg)fMap[ j ].fptr)(val1, val2);
break;
default:
result = 0.0;
//assert (false);
break;
}
break;
}
Demo here
出典
2017-01-30 08:48:38
P0W
をたぶんもっと極端なあなたが探していますが、あなたがしてdlsym' 'でシンボルを検索できdlopen''とライブラリをロードするとしているよりも、次のような何か。 –
'if(ptr ==&sin || ptr ==&cos ...)'?しかし、なぜあなたはこれをしたいのですか?あなたが解決したい*元の*問題は何ですか? [XY問題に関する関連読書](http://xyproblem.info/)。 –
ポインタは文字列 "sin"、 "cos"または関数ポインタsin、cosですか? –