c ++类函数别名

时间:2012-11-10 01:55:06

标签: c++ class function alias

我想知道是否有一种简单的方法来编写c ++类函数的别名。例如,如果我有一个list容器对象,逻辑函数将是

    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 ++有没有严格的'别名'语法? (我找不到任何 - 不确定)
那么,最有效的方法是什么?

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

1 个答案:

答案 0 :(得分:4)

我不会使用预处理器和#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。它提供了一些您可能不想这样做的原因。