0

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

基类 CCNode 有一个 init 方法:

virtual bool init();

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

virtual bool init(int, int);

我想强制使用新的 init(int a, int) 而不是原来的。我知道我可以选择使用默认参数调用新参数,但在上下文中感觉不对。

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

我已经尝试过 C++11 static_assert(false, "message"),但没有调用它就失败了......

4

2 回答 2

1

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

于 2013-05-12T17:45:15.400 回答
0

听起来您可以访问源代码,因为您尝试在其中粘贴静态断​​言?我认为你可以做你想做的唯一方法是模板化有问题的函数。在模板化函数中放置静态断言是确保它不会编译的好方法。

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

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

如果您没有对该 init 函数的源代码访问权限,那么我真的不认为您可以按照您的要求进行操作。

于 2013-05-12T17:07:50.447 回答