如果有人调用c++中的方法,则强制错误(编译时)

Force error (compile time) if anyone calls a method in C++

本文关键字:错误 编译 调用 c++ 方法 如果      更新时间:2023-10-16

免责声明: CCNode类是cocos2d-x框架的一部分,不是我设计的。

基类CCNode有一个init方法:

virtual bool init();

我的派生类需要两个参数,所以我声明了一个新的init方法:

virtual bool init(int, int);

我想强制使用新的init(int a, int)来代替原来的init。我知道我可以用默认参数调用新函数,但是在上下文中感觉不太合适。

我正在寻找一种方法来告诉用户"调用init(int, int)代替",如果有人试图调用那一个。我宁愿在编译时得到它,而不是在运行时。

我尝试过c++ 11的static_assert(false, "message"),但没有调用它就失败了…

如果你真的想阻止别人调用标准节点方法,我认为你应该私下继承它。然而,更简单的方法是从create方法中调用新的init,这是外部代码在构造对象时唯一应该调用的方法。

听起来你有源代码访问,因为你试图在那里粘贴一个静态断言?我认为你能做你想做的事情的唯一方法就是模板化这个函数。在模板函数中放置静态断言是确保它不会编译的好方法。

另一种选择是将声明隐藏在类的私有部分中。

最后,运行时断言是我实现您要求做的事情的最常见的方法。

如果你没有源代码访问init函数,那么我真的不认为你可以做你所要求的