函数指针中可变数量的参数

时间:2013-04-02 11:08:13

标签: c++ function-pointers managed-c++

我有一个指向函数的指针,该函数可以指向具有一个,两个或更多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)(...);,但这不起作用。

2 个答案:

答案 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 );