微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c类函数别名

我想知道是否有一个简单的方法来写一个c类函数的别名.例如,如果我有一些列表容器对象,则逻辑函数将是
int list::length() { return len; }

但程序员可能会使用另一个逻辑别名

int list::size() { return len; }

所以,而不是使用它们的全部函数来编写这两个函数,有没有办法使list :: size()具有list :: length()的别名,这样在编译时不是重复的,而是引用相同的函数

我已经读过,你可以用#define来做到这一点,但是我不想让其他代码名称在某个范围之外(比如’size’变量)混淆.
我也读过这个函数指针可以修复它,但这不是一个别名(因为它必须应用去引用),也不能给函数指针一个声明,给它一个令人困惑的帮助行给用户(我会想),加上混淆,如果我需要嵌套我的代码在另一个对象(我必须调整范围).

我的一个猜测是,大多数优化编译器将会将以下内容作为直接函数别名:

inline int list::length() { return len; }
    inline int list::size() { return length(); }

或者,是否有c的严格“别名”语法? (我找不到 – 不确定)
那么那么最有效的方式是什么呢?

编辑:我已经接受了答案,只是为了填写这个问题,因为这只是我的好奇心.任何有良好信息的人,请添加评论或回答,甚至可能改变我的答案.

解决方法

我不会使用预处理器和#define来做到这一点.一般预处理器应该是C的最后手段.请参阅这个 C++ FAQ on inline functions,其中还包含有关使用预处理器宏的各种恶意的部分.

我将使用的方法是具有一个功能,它将具有几个不同的别名,具有更复杂的功能和接口,您将执行以下操作:

int list::length(string xString,int iValue) {
  int iReturnValue = 0;  // init the return value
  //  do stuff with xString and iValue and other things
  return iReturnValue;
}

然后为别名做类似以下操作.

inline int list::size(string xString,int iValue) {return length(xString,iValue);}

内联应该基本上只是用实际的函数调用替换别名.

另请参阅stack overflow posting Giving a function implementation more than one name.它提供了一些您可能不想这样做的原因.

原文地址:https://www.jb51.cc/c/113964.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐