让我们考虑以下形式的类型特征:
template <class T>
struct is_instantiable
{
static constexpr bool value = /* something */;
};
template <class T>
inline constexpr bool is_instantiable_v = is_instantiable<T>::value;
这将检测是否可以实例化 T
类型的实体。
目前标准库已经具有像 is_constructible
这样的特征(但它需要构造对象的参数)。我想知道:
is_instantiable
类型特征是否有用?- 它会允许目前
is_constructible
有问题的事情吗? - 如何定义/实现它(如果它需要一些编译器魔法也没关系)?
目前我不知道这样的东西是否有用? (如果您有任何有趣的用例,其中 is_constructible
有限制,那就太棒了)。
最佳答案
让我们反过来想一想。
我假设无法实例化的东西是指没有单个有效构造函数并且不是内置类型的东西。
据我所知,唯一可以为任何类型赋予无法构造其实例的方法是通过强制转换(使用 reinterpret_cast
?)。
在我看来,编写这样的代码是一个可怕的决定,但我认为这在理论上是可能发生的。
我想,用例是这样一种情况,您期望您正在处理的对象可能是由此类转换生成的,并且您想知道情况是否如此。
问编译器绝对是一个深奥的问题,我不知道如何有效地使用这些信息,也不知道如何实现这个特性。
关于c++ - 如何定义 is_instantiable 类型特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715831/