14

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

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

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

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

那么,不是用它们的完整体编写两个函数,有没有办法制作list::size()一个别名list::length(),使它在编译时不是重复的,而是引用同一个函数?

我已经读到您可以使用 来执行此操作#define,但我不想在完全超出范围的某个地方(即“大小”变量)引起与其他代号的任何混淆。
我还读过函数指针可以修复它,但这并不完全是别名(因为它必须应用取消引用),也不能给函数指针声明,给用户提供令人困惑的帮助热线(我想),如果我需要将我的代码嵌套在另一个对象中(我必须调整范围),就会感到困惑。

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

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

或者,C++ 是否有任何严格的“别名”语法?(我找不到任何 - 不确定)
那么,最有效的方法是什么?

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

4

1 回答 1

6

我不会使用预处理器和#define 来执行此操作。一般来说,预处理器应该是 C++ 中的最后手段。请参阅有关内联函数的 C++ 常见问题解答,其中还包含有关使用预处理器宏的各种弊端的部分。

我将使用的方法是拥有一个具有多个不同别名的函数,该函数具有更复杂的函数和接口,您可以执行以下操作:

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);}

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

另请参阅此堆栈溢出帖子为函数实现提供多个名称。它提供了一些您可能不想这样做的原因。

于 2012-11-10T02:19:45.360 回答