函数指针中的可变参数数量[重复]

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++ 中工作

以上是关于函数指针中的可变参数数量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何实现可变参函数

C/C++中的可变参数和可变参数模板

中继可变参数模板参数时出现 Visual Studio 错误 [重复]

创建具有可变数量参数的 CLR UDF

具有不同数量参数的函数中的 C++ 代码重复

将数组传递给 TypeScript 中的可变参数函数