有没有办法测试C++类是否有默认构造函数(编译器提供的类型特征除外)?

Vic*_*iba 21 c++ boost

可以定义Traits类来检查C++类是否具有成员变量,函数或类型(请参阅此处).

奇怪的是,ConceptTraits不包含检查C++类是否定义默认构造函数或给定构造函数的特征?

可以使用特征来检查构造函数的存在吗?如果有,怎么样?如果没有,为什么不可能呢?

Vic*_*iba 6

抱歉回答可能自己的问题。

谷歌搜索我发现我们无法检查类是否具有构造函数或析构函数的实际原因是,用于检测类是否具有成员的已知技术是基于获取成员的地址。但是构造函数和析构函数没有名字,我们不能取它们的地址。

如果我们不能取地址,我看不出有什么方法可以让编译器在不直接实例化的情况下对构造做出反应,但在这种情况下,在编译时没有检测到错误。

所以为了回答我自己的问题,我会说使用当前的技术是不可能检测到它们的,并且需要编译器支持。但是 C++ 已经揭示了很多惊喜,在特定时间不可能实现的事情,可以使用另一种技术来揭示。

我希望 C++ 语言专家正在阅读并给出更清晰的解释。