【发布时间】:2013-06-06 15:50:39
【问题描述】:
首先,请注意我使用的是 C++03(并且 C++11 不是一个选项)。我正在使用 boost 概念来检查某个类是否可以默认构造:
BOOST_CONCEPT_ASSERT((boost::DefaultConstructible<my_class>));
但是,对于其他一些类,我想断言该类型确实 没有 具有默认构造函数。有没有办法做到这一点?
更新:致所有那些将问题标记为重复或已回答但未阅读的超级专家:我在第一段中声明我已经使用 boost 概念来检查类是默认的-constructible(这是应该重复的问题)。我还明确声明我不能使用 C++11,所以我无法使用 type_traits。那么,有人可以请我指出我的问题“已经回答”的具体部分吗?因为我还没找到。
【问题讨论】:
-
如果您可以从 TR1 或通过编译器扩展访问
,它有简单的解决方案。编译器也可能具有相关的内在函数。 (即 VS2010 可以) -
我在某个地方迷路了,不是添加!在引用的表达式中你在追求什么?
-
@BalogPal:据我从代码中可以看出,这些断言不能通过为带括号的表达式的任何部分返回真值来工作。取而代之的是,其中涉及很多宏魔术,但归结为某些函数的代码,除非所讨论的概念成立,否则这些函数将无法编译。至少将无法编译的代码转换为编译代码,反之亦然。
-
没有
type_traits,很遗憾。严格来说是 C++03。 -
再次声明:我不能使用 C++11,所以我不能使用
is_constructible。真正读懂这个问题有那么难吗?