如何实现C的函数重载(三)

2013-07-22 17:56:40 · 作者: · 浏览: 375

 

  或者一个更高级的写法:

  voidgcc_type_overload_aux(inttypeval, ...)

  {

  switch(typeval)

  {

  case1:

  {

  va_list v;

  va_start(v, typeval);

  structs1 s = va_arg(v,structs1);

  va_end(v);

  gcc_overload_s1(s);

  break;

  }

  case2:

  {

  va_list v;

  va_start(v, typeval);

  structs2 s = va_arg(v,structs2);

  va_end(v);

  gcc_overload_s2(s);

  break;

  }

  default:

  {

  printf("Invalid type to 'gcc_type_overload()'\n");

  exit(1);

  }

  }

  }

  #definegcc_type_overload(A)\

  gcc_type_overload_aux(\

  __builtin_types_compatible_p(typeof(A),structs1) *1\

  + __builtin_types_compatible_p(typeof(A),structs2) *2\

  , A)

  另外两种用 C 实现函数重载的方法可以是利用宏和预处理,以及函数指针,只不过具体的重载方式也要根据特定的应用场景来决定。

  不过,C 实现函数重载需要开发人员自己编写很多额外的代码,门槛稍微高了,这也使得 C 语言不太适合用函数重载方式来编写规范的应用程序接口。

  所以,以后别人如果问你,C 可不可以实现函数重载,你就不能说“C 是不支持函数重载的”,而应该回答:“看情况看心情看应用场景咯 :-)“。