首页 > 解决方案 > 将 boost::format 与 std::vector 一起使用

问题描述

可以像下面这样boost::format使用。std::vector<std::string>

    std::vector<std::string> name = {"some", "name"};
    boost::format("%s, %s") % name[0] % name[1];

由于我有一个大向量,我想将它们一起使用而无需手动编写索引:

    std::vector<std::string> name = {"some", "name"};
    boost::format("%s, %s") % name;

使用诸如boost::algorithm::join连接字符串之类的东西不是一种选择。有没有办法在不显式编写索引的情况下使用向量实现字符串格式化?

标签: c++boost

解决方案


查看此示例:

#include <vector>
#include <string>
#include <iostream>

#include <boost/format.hpp>

auto format_vector(boost::format fmt, const std::vector<std::string> &v) {
    for(const auto &s : v) {
        fmt = fmt % s;
    }
    return fmt;
}

int main() {
    std::vector<std::string> name = {"some", "name"};
    std::cout << format_vector(boost::format("%s, %s"), name) << "\n";
    return 0;
}

https://godbolt.org/z/nGqW9h

Operator%of format 在内部存储部分解析的字符串,并返回自身 - 因此它可以像常规使用一样被链接。我们可以存储这个部分状态以循环操作。

虽然,您仍然需要注意%s格式字符串中的正确计数!


推荐阅读