关于静态反射c++的思考和尝试

本文源于对C++静态反射的思考,通过一系列代码示例(如types_vector.h, template_types_base_class.h等),展示了如何在C++中实现静态反射,尽管其实际应用有限,但对于想要探索C++技巧的开发者来说,这是一个有趣的学习案例。" 113492497,10543790,Vue项目中setup语法糖使用Vuex的简易教程,"['Vue框架', 'Vuex状态管理', 'JavaScript', '前端开发']
摘要由CSDN通过智能技术生成

编写这个东西的起因是一些关于静态反射性c++的思考,不过本质上用处不大,除非你全部的类都用tuple实现。有兴趣的可以当做一种对于c++奇技淫巧的学习,没兴趣也不用看。

main.c

#include <iostream>
#include <list>
#include <vector>
#include <numeric>
#include "types_vector.h"
#include "types_vector_merger.h"
using namespace template_type_traits;
template<typename Arg>
struct Check
{
    enum
    {
        value = std::is_same<int, Arg>::value || std::is_same<char, Arg>::value
    };
};

int main()
{
    //types_vector的功能
    //apply 将所有内部类型转接
    //arg 读取
    //remove_if 条件移除,前后联合性的话可以使用remove_if_by_iterator,不过对于内部实现要有一定了解
    //merge 合并其他容器
    //erase下标移除
    //insert 插入
    //change 改变
    //explos 拆除某类型,一般来说不应该提供这个功能
    using typeArgA = types_vector<std::vector<int>, bool, char>;
    typeArgA::remove_if<Check>::change<2, int> a;
    std::cout << typeid (decltype (a) ::arg<2>).name() << "\n";
    return 0;
}

types_vector.h

#ifndef TYPES_HANDLER_H
#define TYPES_HANDLER_H

#include "template_types_base_class.h"
#include "types_condition_remove_checker.h"
#include "types_vector_merger.h"
namespace template_type_traits
{
    //条件转接器
    template<template<typename Arg> class CheckClass>
    struct type_check_to_iterator_check
    {
        template<typename Iterator>
        struct check
        {
            enum
            {
                value = CheckClass<typename Iterator::arg>::value
            };
        };
    };

    template <template<typename Arg> class CheckClass>
    struct type_check_operator_not
    {
        template<typename Iterator>
        struct check
        {
            enum
            {
                value = !CheckClass<Iterator>::value
            };
        };
    };

    //索引效验器
    template<size_t from, size_t to>
    struct index_check
    {
        template<typename Iterator>
        struct check
        {
            enum
            {
                value = Iterator::effect && Iterator::index >= from && Iterator::index < to
            };
        };
    };

    //可变类型参数处理器
    template<typename ...Args>
    struct types_vector
    {
        enum
        {
            ARGS_NUM = sizeof... (Args)
        };

        template < size_t i, bool isEffect>
        struct IteratorBase;

        template < size_t i, bool isEffect = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值