我想知道是否有一个简单的方法来写一个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.它提供了一些您可能不想这样做的原因.