带模板参数函数指针_作为_函数入参

#include "boost/algorithm/string.hpp"
#include <functional>
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>

// template <typename DstType>
// int (*Handler)(const char*, size_t, DstType*);

/**
 * @func : 模板函数指针  作为   另一个函数的入参
 */

template <typename DstType>
using Handler = std::function<int(const char*, size_t, DstType*)>;

class Dict {
 public:
    Dict() {
        dict_["1"] = "1,2,3,4,5,6";
        dict_["2"] = "11,22,33,44,55,66";
        dict_["3"] = "111,222,333,444,555,666";
    }
 public:
    template <typename T>
    int Get(const std::string& key, Handler<T> data_handler, T* result) {
        if (result == nullptr) {
            return -1;
        }
        auto iter = dict_.find(key);
        if (iter == dict_.end()) {
            return -2;
        }
        return data_handler(iter->second.c_str(), iter->second.length(), result);
    }

 public:
    std::unordered_map<std::string, std::string> dict_;
};

int HandlerTest(const char* value_str, size_t length, std::unordered_set<std::string>* ret) {
    std::vector<std::string> tmp;
    boost::split(tmp, std::string(value_str, length), boost::algorithm::is_any_of(","));
    for (const auto& item : tmp) {
        (*ret).insert(item);
    }

    return 0;
}

int main(int args, char* argv[]) {
    Dict dict;
    std::unordered_set<std::string> uset;
    dict.Get<std::unordered_set<std::string>>("2", HandlerTest, &uset);
    for (const auto& item : uset) {
        std::cout << item << ", ";
    }
    std::cout << "\nComplete!\n"; 
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值