Cod*_*ith 11 c++ alias class function
我想知道是否有一种简单的方法来编写c ++类函数的别名.例如,如果我有一些list
容器对象,那么逻辑函数就是
int list::length() { return len; }
Run Code Online (Sandbox Code Playgroud)
但程序员可能使用的另一个逻辑别名可能是
int list::size() { return len; }
Run Code Online (Sandbox Code Playgroud)
因此,有没有任何方法可以创建list::size()
别名list::length()
,使其在编译时不重复,而是引用相同的函数?
我已经读过你可以这样做了#define
,但是我不想在某个地方完全超出范围的其他代码名称(即'size'变量)引起任何混淆.
我还读过函数指针可以修复它,但这不是一个别名(因为它必须应用去引用),也不能给函数指针一个声明,给用户一个令人困惑的帮助线(我想),加上混乱,如果我需要将我的代码嵌套在另一个对象中(我必须调整范围).
我的一个猜测是,大多数优化编译器将以下内容作为直接函数别名:
inline int list::length() { return len; }
inline int list::size() { return length(); }
Run Code Online (Sandbox Code Playgroud)
或者,c ++有任何严格的"别名"语法吗?(我找不到任何 - 不确定)
那么,这样做最有效的方法是什么?
编辑:我接受了答案只是为了结束这个问题,因为这只是我的一个好奇心.任何有良好信息的人,请添加评论或回答,我甚至可能会改变我的答案.
我不会使用预处理器和 #define 来做到这一点。一般来说,预处理器应该是 C++ 的最后手段。请参阅有关内联函数的 C++ FAQ,其中还包含有关使用预处理器宏的各种弊端的部分。
我将使用的方法是拥有一个函数,该函数将具有多个不同的别名,具有更复杂的函数和接口,您将执行以下操作:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后对别名执行类似以下操作。
inline int list::size(string xString, int iValue) {return length(xString, iValue);}
Run Code Online (Sandbox Code Playgroud)
内联应该基本上只是用实际的函数调用替换别名。
另请参阅此堆栈溢出帖子 Giving a function implementation more than one name。它提供了一些您可能不想这样做的原因。