如果有人调用c++中的方法,则强制错误(编译时)
Force error (compile time) if anyone calls a method in C++
免责声明: 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函数,那么我真的不认为你可以做你所要求的
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- std::is_base_of表示ctor编译错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt Cmake 错误编译"GuiSupportQt not found"
- Opengl 精度转换错误编译错误 E0415
- 库将ARM架构错误编译为架构X64
- RT 音频 Mac 错误 g++ 编译错误
- 错误编译Boost.log
- 错误编译QT创建者 / QT窗口小部件示例
- 错误编译MIPS32
- Visual Studio 2013 中的错误(编译和运行代码)
- 链接错误编译qt项目在visual 2010
- 无法用模板错误编译nsgmls
- 奇怪的错误.编译失败
- 如果有人调用c++中的方法,则强制错误(编译时)
- 来自autoconf测试的错误编译命令
- 时间限制超出错误C++编译
- SFML 2.3 和 CodeBlocks 错误编译