对于 Foo 类,有没有办法在不给它命名的情况下禁止构造它?
例如:
Foo("hi");
并且仅在您给它一个名称时才允许它,如下所示?
Foo my_foo("hi");
第一个的生命周期只是语句,第二个是封闭块。在我的用例中,Foo
正在测量构造函数和析构函数之间的时间。由于我从不引用局部变量,所以我经常忘记将其放入,并意外地更改生命周期。我想得到一个编译时错误。
另一个基于宏的解决方案:
#define Foo class Foo
该声明Foo("hi");
扩展到class Foo("hi");
,其格式不正确;但Foo a("hi")
扩展到class Foo a("hi")
, 哪个是对的。
这样做的优点是它与现有(正确的)代码源代码和二进制兼容。(这个说法并不完全正确 - 请参阅下面 Johannes Schaub 的评论和随后的讨论:“你怎么知道它与现有代码源兼容?他的朋友包括他的标头并具有 void f() { int Foo = 0; } 之前编译得很好,现在编译错误了!此外,定义 Foo 类成员函数的每一行都会失败: void class Foo::bar() {}")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)