c++ 类型处理初步代码

#include <iostream>
#include <map>
#include <string>

using namespace std;
enum class DataType {
    NULL_TYPE = 0,
    INT_TYPE = 1,
    DOUBLE_TYPE = 2,
    STRING_TYPE = 3,
};

struct Column {
    DataType type;
    void *data;
};

Column empty_column{.type = DataType::NULL_TYPE, .data = nullptr};

class AbsColumnProcessor {
private:
    virtual void before_precess(Column &column) {}

    virtual void after_process(Column &column) {}

    virtual void do_process(Column &column) = 0;

public:
    virtual void process(Column &column) {
        before_precess(column);
        do_process(column);
        after_process(column);
    }
};


using int_func_cb = void (*)(int &);

class IntColumnProcessor : public AbsColumnProcessor {
private:
    int_func_cb func;

    void do_process(Column &column) override {
        func(*(int *) (column.data));
    }

public:

    IntColumnProcessor(int_func_cb func) : func(func) {}
};


class DataFrame {
    map<string, Column> name2column;

public:
    void set(string key, Column &column) {
        name2column[key] = column;
    }

    Column &get(string key) {
        if (!name2column.contains(key)) {
            return empty_column;
        }
        return name2column[key];
    }
};

void addOne(int &x) {
    x++;
}

int main() {
    // 初始化
    DataFrame df;
    int *x = new int(1);
    Column column{.type = DataType::INT_TYPE, .data = x};
    // 设置
    df.set("1", column);
    // 获得
    auto &v = df.get("1");

    // 修改
    AbsColumnProcessor *ap;
    switch (v.type) {
        case DataType::NULL_TYPE : {
            break;
        }
        case DataType::INT_TYPE : {
            ap = new IntColumnProcessor(addOne);
            ap->process(v);
            cout << *x << endl;
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值