--------------

本文介绍了void_t和enable_if在C++模板中的使用,展示了如何通过它们实现类型判断和类型转换,以及在MyStruct1和MyStruct2结构中的模板特化实例。重点在于理解基础模板机制和类型匹配的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void_t
作用:就是判断类型能被生成
类似:enable_if

template <bool _Test, class _Ty = void>
struct enable_if {}; // no member "type" when !_Test

template <class _Ty>
struct enable_if<true, _Ty> { // type is _Ty for _Test
    using type = _Ty;
};

template <bool _Test, class _Ty = void>
using enable_if_t = typename enable_if<_Test, _Ty>::type;

template <class... _Types>
using void_t = void;
#include <iostream>
#include <type_traits>
using namespace std;
struct MyStruct1
{
    int name;
};
struct MyStruct2
{
    int age;
};
namespace xxx
{
    template <class... _Types>
    using void_t = void;

    template<class T, class = void>
    struct typeStruct : false_type{};

    template<class T>
    struct typeStruct<T, void_t<decltype(T::name)>> : true_type{};
}
int main()
{
    auto a = xxx::typeStruct<MyStruct1>::value;
    auto b = xxx::typeStruct<MyStruct2>::value;
    return 0;
}

在这里插入图片描述

template<class T, class = void>
    struct typeStruct : false_type{};

    template<class T>
    struct typeStruct<T, void_t<decltype(T::name)>> : true_type{};

注意点:class必须是void类型,否则就需要显示调用。
xxx::typeStruct<MyStruct1, void>::value;
这个因为我之前说过的一个匹配机制。
模板层面先去匹配,然后才是特化层面
假设现在基类模板定义为template<class T, class = int>
xxx::typeStruct实际为xxx::typeStruct<MyStruct1,int>
直接不符合特化typeStruct<T, void>,因此直接会调用基类模板。
为了单参数下可以使用,参数必须默认时void

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值