gpt4 book ai didi

C++ 类函数别名

转载 作者:可可西里 更新时间:2023-11-01 15:24:57 28 4
gpt4 key购买 nike

我想知道是否有一种简单的方法来编写 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++ 是否有任何严格的“别名”语法? (我找不到任何 - 不确定)
那么,最有效的方法是什么?

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

最佳答案

我不会使用预处理器和#define 来做这件事。一般来说,预处理器应该是 C++ 中的最后手段。看这个C++ FAQ on inline functions其中还包含有关使用预处理器宏的各种弊端的部分。

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

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 .它提供了一些您可能不想这样做的原因。

关于C++ 类函数别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318491/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com