cub*_*ube 1 c++ pointers overloading reference
我正在用C++编写一个库,并且有一些与模块一起工作的函数.一个例子看起来像这样:
void connect(Module *a, Module *b);
Run Code Online (Sandbox Code Playgroud)
问题是,如果函数接受也引用它有时会很方便(一些模块可能在堆栈上分配,一些模块在堆上,所有的&s和*s很快就会变得无聊和混乱).
现在我有内联函数,它接受引用,将它们转换为指针并调用原始函数.
inline void connect(Module &a, Module &b){
connect(&a, &b);
}
Run Code Online (Sandbox Code Playgroud)
我不太喜欢这个解决方案,因为对于更多的函数,它会编写很多代码来编写,读取,编译,...
另一件正在考虑的事情就是增加Module::operator Module *()必须返回的东西this.
你对此有何看法?我错过了没有任何史诗般失败的可能吗?
谢谢.
Zif*_*fre 14
为什么不直接调用该函数
connect(&a, &b);
Run Code Online (Sandbox Code Playgroud)
就像你的内联函数一样,只要你用引用来调用它?这使得它非常清楚该功能将指针,并且a和b不是指针.您只需要输入两个以上的字符.
任何时候使用运算符重载,都会增加史诗失败的可能性.问题是你知道你并不是*一个标准的指针操作符,但有人天真地阅读你的代码却没有.
最好的解决方案是返回并重构/重新考虑您的代码,因此您不需要两个接口进行相同的操作,
我不确定在你的情况下这是不是一个好主意,但一般来说,你可以使用一个参数适配器:
struct ModulePtrOrRef
{
Module * m_p;
Module(Module * p) : m_p(p) {}
Module(Module & p) : m_p(&p) {}
}
void connect(ModulePtrOrRef a, ModulePtrOrRef b)
{
connect_impl(a.m_p, b.m_p);
}
Run Code Online (Sandbox Code Playgroud)