一切都可以转换成的类型?

时间:2017-03-27 12:36:22

标签: c++ templates type-conversion c++14 typetraits

我在C ++ 14中有.redbutton:before { content: ''; position:absolute; left:-20px; right:-20px; top:-20px; bottom:-20px; background-image: url('https://i.stack.imgur.com/Nb7M7.png'); background-size: 100% 100%; } 类型,T为所有可能的std::is_convertible<T, X>::value返回true

3 个答案:

答案 0 :(得分:1)

你当然可以自己制作一个:

#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;
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您只想让元函数始终返回true,那么因为您正在编写一些超级duper元函数并且需要一个布局逻辑的占位符,那么我只是犯了罪并专门化了模板:

struct everything {};

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

虽然,诚然,this answer可以更好地完成这项工作,因为它不会进入std命名空间并开始破坏模板。

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