所有内容都可以转换为的类型

A type to which everything can be converted to?

本文关键字:类型 转换 都可以      更新时间:2023-10-16

我在 C++14 中有一个类型T,这样std::is_convertible<T, X>::value为所有可能X返回true

你当然可以自己做一个:

#include <string>
#include <type_traits>
struct Foo
{
  template <class T>
  operator T();
};
int main() 
{
  struct Bar{};
  static_assert(std::is_convertible<Foo, int>::value, "");
  static_assert(std::is_convertible<Foo, std::string>::value, "");
  static_assert(std::is_convertible<Foo, Bar>::value, "");
  return 0;
}

正如我们可以定义class B {~B() = delete;} ;

我们可以得出结论,对于任何给定的 T 类型,始终存在至少一个 T 不能转换为的类型 X。

如果你想要的只是元函数总是返回 true,比如因为你正在编写一些超级元函数并且需要一些布尔逻辑的占位符,那么我只是犯罪并专门化模板:

struct everything {};
namespace std {
    template<typename X>
    struct is_convertible<everything, X> : true_type {};
};

虽然,诚然,这个答案做得更好,因为它不会闯入std命名空间并开始破坏模板。

否则,不,没有这样的类型。至少没有会为你生成有效对象的类型。