【问题标题】:How would an is_instantiable type trait be defined?如何定义 is_instantiable 类型特征?
【发布时间】:2018-04-08 08:12:41
【问题描述】:

让我们考虑以下形式的类型特征:

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 受到限制,那就太好了)。

【问题讨论】:

  • 很有趣,但最终这个问题太宽泛了。询问某事如何有用通常具有这种特征。
  • 这是在询问问题本身如何有用和定义,这是一种循环

标签: c++ instance language-lawyer template-meta-programming typetraits


【解决方案1】:

让我们反过来想一想。 我假设无法实例化的东西是指没有单个有效构造函数且不是内置类型的东西。 据我所知,你可以给任何东西一个类型,一个不能构造的实例的唯一方法是通过强制转换(使用reinterpret_cast?)。 在我看来,编写这样的代码是一个可怕的决定,但我想理论上它可能会发生。

我想,一个用例是这样一种情况,您期望您正在处理的对象可能是由这样的转换产生的,并且您想知道是否是这种情况。

问编译器绝对是一个深奥的问题,我不知道如何有效地使用这些信息,也不知道如何实现这个特性。

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 2022-11-18
    • 2015-01-21
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多