我有一个指向函数的指针,该函数可以指向具有一个,两个或更多args的函数。
double (*calculate)(int);
double plus(int a, int b){ return a+b; }
double sin(int a){ return Math::Sin(a); }
我怎么可能使用
calculate = plus;
calculate = sin;
在同一个程序中。不允许改变功能加上和罪恶。用托管c ++编写;
我已经尝试double (*calculate)(...);
,但这不起作用。
答案 0 :(得分:0)
将plus
分配给calculate
是一种类型违规行为,并且稍后调用calculate
会导致undefined behavior,因此可能发生任何事情(不良)。
您可能对libffi感兴趣(但我不知道它是否适用于托管C ++)。
答案 1 :(得分:0)
您可以尝试使用以下内容:
struct data
{
typedef double (*one_type) ( int a );
typedef double (*other_type) ( int a, int b );
data& operator = ( const one_type& one )
{
d.one = one;
t = ONE_PAR;
return *this;
}
data& operator = ( const other_type& two )
{
d.two = two;
t = TWO_PAR;
return *this;
}
double operator() ( int a )
{
assert( t == ONE_PAR );
return d.one( a );
}
double operator() ( int a, int b )
{
assert( t == TWO_PAR );
return d.two( a, b );
}
union func
{
one_type one;
other_type two;
} d;
enum type
{
ONE_PAR,
TWO_PAR
} t;
};
double va( int a )
{
cout << "one\n";
}
double vb( int a, int b )
{
cout << "two\n";
}
这很好用:
data d;
d = va;
d( 1 );
d = vb;
d( 1, 2 );