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

时间:2013-05-12 16:47:10

标签: c++ c++11 cocos2d-x

免责声明: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"),但没有调用它就失败了......

2 个答案:

答案 0 :(得分:1)

如果你真的想阻止有人调用标准节点方法,我认为你应该私下继承它。但是,执行此操作的方法更简单,就是从create方法调用new init,这是构造对象时应该由外部代码调用的唯一方法。

答案 1 :(得分:0)

听起来你有源代码访问权限,因为你试过在那里粘贴一个静态断言?我认为你可以做到你想要的唯一方法就是对所讨论的功能进行模板化。将静态断言放在模板化函数中是确保它不能编译的好方法。

另一个选择是隐藏你班级私人部分的声明。

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

如果您没有源代码访问该初始化函数,那么我真的不认为您可以做您所要求的。