gpt4 book ai didi

c++ - has_type 模板为 struct type {} 返回 true;

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:21 30 4
gpt4 key购买 nike

有很多方法可以实现 has_type<T>推导 if T 的模板有一个名为 type 的嵌套类或 typedef .即

namespace detail {
template<typename> struct tovoid { typedef void type; };
}

template<typename T, typename = void> struct has_type
: std::false_type { };
// this one will only be selected if C::type is valid
template<typename C> struct has_type<C, typename detail::tovoid<typename C::type>::type>
: std::true_type { };

或者

template <typename C> char test_for_type(...) { return '0'; }
template <typename C> double test_for_type(typename C::type const *) { return 0.0; }

template <typename T> struct has_type
{
static const bool value = sizeof(test_for_type<T>(0)) == sizeof(double);
};

然而,无论哪种情况,has_type<type>::valuetrue对于这个类:

struct type
{
};

现在上面type没有另一个 type嵌套在其中,但它确实有一个构造函数 type::type() .

但是该构造函数是否应该“触发”对嵌套类型的检查?还是编译器错误?(我认为 typename type::type 不适用于构造函数和/或您不能使用指向构造函数的指针,例如第二个测试方法会产生什么:typename type::type const *

?

最佳答案

类的名称被“注入(inject)”到类的作用域中,所以 type::type 实际上是一个类型的名称,它与 ::的类型相同:输入

关于c++ - has_type 模板为 struct type {} 返回 true;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626293/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com