我正在尝试一种可以将ANY TYPE作为参数(Object1,Object2等)的方法。这是一个非常简单的方法来说明它将要执行的操作:
void printAnything(Object obj) {
obj.print("hi");
}
我要问的是,用那种方法可以代替Object吗?
谢谢!
答案 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语言中,没有重载,一个函数,一个名称,您需要使用一种支持所有需求的类型,例如(无效*)