使用C将任何类型作为方法参数传递

时间:2019-01-08 19:24:07

标签: c

我正在尝试一种可以将ANY TYPE作为参数(Object1,Object2等)的方法。这是一个非常简单的方法来说明它将要执行的操作:

void printAnything(Object obj) {
    obj.print("hi");
}

我要问的是,用那种方法可以代替Object吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

  

将任何类型传递为A ...参数

void f(/* no signature here */);

int main() {
  f(1);
  f(1.2);
  f("Hello");
  f(f);
}

void f(/* TBD signature */) {
  ;
}

调用任何类型的函数都很容易。要做一些有用的事情是棘手的部分。

一个example of printing,没有直接使用_Generic()来指定代码的类型。

GPrintf("The answer to everything ", GP(42), " or ", GP(42.0), GP_eol);

创建一个类似函数的宏的中心思想是,该宏使用_Generic来选择表单代码。下面是平方根示例。

#define xsqrt(X) _Generic((X), \
  long double: sqrtl, \
  default: sqrt, \
  float: sqrtf \
  )(X)


xsqrt(42.0f); // calls  sqrtf
xsqrt(42.0);  // calls  sqrt
xsqrt(42);    // calls  sqrt

答案 1 :(得分:1)

您不能那样做。 在C语言中,没有重载,一个函数,一个名称,您需要使用一种支持所有需求的类型,例如(无效*)