有什么方法可以检查一个指针指向sin,cos,pow,log或exp的字符串是否是math.h头文件的一部分?
我需要实现以下伪代码:
if(ptr is equal to sin,cos,log,exp,pow)
Execute code
else
return 0;
答案 0 :(得分:1)
有什么方法可以检查指针是否指向一个字符串 sin,cos,pow,log或exp是math.h头文件的一部分吗?
我假设你想根据字符串匹配调用不同的 math 函数。
您可以使用类似以下数据结构的内容来实现此目的:
// 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 );
然后你可以创建一个数据结构来映射nfunctions和no。像:
这样的论点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;
}