函数指针中的可变参数数量[重复]
Posted
技术标签:
【中文标题】函数指针中的可变参数数量[重复]【英文标题】:variable number of parameters in function pointer [duplicate] 【发布时间】:2013-04-02 11:08:12 【问题描述】:我有一个指向函数的指针,它可以指向带有一个、两个或多个参数的函数。
double (*calculate)(int);
double plus(int a, int b) return a+b;
double sin(int a) return Math::Sin(a);
我怎么可能使用
calculate = plus;
calculate = sin;
在同一个程序中。不允许更改函数 plus 和 sin。用托管 C++ 编写;
我试过double (*calculate)(...);
,但没用。
【问题讨论】:
这已经在这里被问及回答了:***.com/q/11037393/2036917 它传输了 args 的数量,这在我的算法中是不可能的。我想做一种函数重载。 【参考方案1】:将plus
分配给calculate
是一种类型冲突,当稍后调用calculate
时会导致undefined behavior,所以任何事情(坏的)都可能发生。
您可能对libffi 感兴趣(但我不知道它是否适用于托管 C++)。
【讨论】:
【参考方案2】:你可以试试这样的:
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 );
【讨论】:
不幸的是,不能在托管 c++ 中工作以上是关于函数指针中的可变参数数量[重复]的主要内容,如果未能解决你的问题,请参考以下文章