存档

文章标签 ‘boost’

Boost LRU-Cache使用方法简介

2017年11月13日 没有评论

    缓存是提高系统运行效率的常用组件,可以将“有效的”业务数据直接返回用户,避免繁琐的计算过程。除了Redis、MemCache等常用缓存系统,应用程序内部也可以根据需要设置一定容量的缓存,减少跨进程调用,提高效率。

    LRU是常用的缓存策略,可以将访问最 频繁的数据保存在有限的缓存中,提高缓存命中率。

    在C++中,可以通过map来保存数据键值对,并通过list将最近使用的数据保存在一端,从list的另一端来清除过期数据的方法实现一个缓存系统。

    然而,我们没必要自己再造一个轮子。Boost-1.65.1版本开始引入了lru_cache算法,通过模板的方式可以方便的实例化出各种类型的缓存对象。

    下面简单介绍boost lru_cache的使用方法。

#lru_cache头文件,这是个header-only库,不需要其他模块
#include <string>
#include <iostream>
using namespace std;
#include <boost/compute/detail/lru_cache.hpp>

int main()
{
    const int iCacheSize=100;
    #初始化时设置缓存容量
    boost::compute::detail::lru_cache<string, string> ssCache(iCacheSize);

    #插入数据
    ssCache.insert("ZhangSan", "Beijing");
    ssCache.insert("LiSi", "Shanghai");

    #查找并获取数据
    string s("ZhangSan");
    if(ssCache.contains(s))
    {
        #注意!get方法返回的是一个boost::optional<string>对象,而不是直接返回存入其中的Value类型的对象!
        boost::optional<string> o_Region=ssCache.get(s);
        #我们可以通过boost::optional<string>的get()来获取Value对象
        string sRegion=o_Region.get();
        cout << s << " comes from " << sRegion << endl;
    }

    return 0;
}
分类: C/C++, 开发 标签: , ,

boost常用库之program_options

2015年9月10日 没有评论

C++标准库本身不提供处理命令行参数的类,通常情况下需要手动“造轮子”。感谢boost,我们有了progam_options这个好用的类库。

  1. program_options简介该库允许开发者从命令行或者文件中获取(name,value)形式的程序选项,比如./mypro -P1 param1 –p2 param2。
    相较于自己手写代码处理程序参数,使用program_options具有以下优点:

    • 简单:库体积小巧,声明程序选项语法简单,自动转换选项值的类型并存储到变量中;
    • 更好的错误报告;
    • 可从任何地方读取选项:不仅限于命令行,文件甚至环境变量亦可,而这并不需要额外的代码量;
  2. 如何使用?
    • 确认编译boost生成了libboost_program_options.so库文件,并且确认头文件/boost/program_options.hpp存在。否则什么都干不了~
    • 源文件中#include <boost/program_options.hpp>
    • makefile中链接选项加入-lboost_program_options,当然编译选项include目录也得能找到program_options.hpp
  3. 例子

    //命名空间缩略名
    namespace po = boost::program_options;
    try {
    //使用类options_description声明程序选项描述信息
    po::options_description desc(“Allowed options”);
    //add_options方法用于声明选项信息,包括选项名称、值的信息(类型,默认参数等)、选项描述信息
    string filter;
    desc.add_options()
    (“help”, “produce help message”) //名称、描述
    “compression”, po::value<int>(), “set compression level”) //名称、值类型、描述
    (“filter,F”, po::value<string>(&filter)->default_value(“tcp port 80″), “set pcap filter”) //名称、值类型和默认参数、描述
    ;
    //从命令行解析并存储程序选项
    po::variables_map vm;
    po::store(po::parse_command_line(ac, av, desc), vm);
    po::notify(vm);
    //读取选项
    if (vm.count(“help”)) {
    cout << desc << “\n”; return 1;
    }
    if (vm.count(“compression”)) {
    cout << “Compression level was set to ” << vm[“compression”].as<int>() << “.\n”;
    }
    else {
    cout << “Compression level was not set.\n”;
    }
    }
    catch(…) {
    }

  4. 更多内容可参考Boost.Program_options
分类: C/C++ 标签: ,

部分编译安装boost

2015年7月1日 1 条评论

完整编译boost库需要很长时间,而且我们不一定会用到所有的库。那么如何只编译只需要的库呢?

  1. 解压boost源码,进入解压后的目录
  2. ./bootstrap.sh生成bjam
  3. ./bjam –build-type=complete –layout=versioned –toolset=gcc –with-thread –with-regex #–with指定所需要的模块
  4. ./bjam install #安装到默认路径下
分类: C/C++, 开发, 资料 标签: , ,