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

标签 c++ boost

可以定义特征类来检查 C++ 类是否具有成员变量、函数或类型(参见 here)。

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

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

最佳答案

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

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

如果我们不能获取地址,我看不出有一种方法可以让编译器在不直接实例化构造的情况下对其使用react,但在这种情况下,编译时不会检测到,而是会出错。

所以要回答我自己的问题,我想说的是,使用当前技术无法检测到它们,因此需要编译器支持。但是 C++ 揭示了很多惊喜,在给定时间不可能的事情被揭示了,使用另一种技术是可能的。

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

关于c++ - 有没有办法测试 C++ 类是否具有默认构造函数(编译器提供的类型特征除外)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2733377/

相关文章:

c++ - 如何禁止函数指针参数为空值

c++ - boost::lockfree:queue 中的内存排序

c++ - boost multi_index_container、范围变异算法和常量

c++ - 如何使用 CGAL Point_3 以外的类进行点集处理?

c++ - 激活中断的麦克风特定信号

c++ - 与 C++20 协程一起使用时,boost::asio::use_awaitable 和 boost::asio::deferred 之间有什么区别?

c++ - C++中的双向异步通信

boost - 根据 typedef 可以是 wcout 的通用 cout

c# - Unity3D 的 OpenCV dll 调用导致 FPS 下降

c++ - 如何禁用特定的 IBM XL C++ 编译器警告?