C++ std::vector的Boost自定义验证器<;双倍>;

C++ std::vector的Boost自定义验证器<;双倍>;,c++,validation,c++11,boost,C++,Validation,C++11,Boost,我已经为std::vector编写了以下自定义验证器 typedef矢量坐标; 无效验证(boost::any&v、, 常量向量和值, 坐标*,整数){ std::cout您应该编写一个自定义转换: #include <boost/program_options.hpp> #include <boost/algorithm/string/split.hpp> #include <boost/algorithm/string/classification.hpp&g

我已经为
std::vector
编写了以下自定义验证器

typedef矢量坐标;
无效验证(boost::any&v、,
常量向量和值,
坐标*,整数){

std::cout您应该编写一个自定义转换:

#include <boost/program_options.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <fstream>
#include <iostream>

namespace po = boost::program_options;
typedef std::vector<double> coordinate;

int main() {
    coordinate c;

    // Setup options.
    po::options_description desc("Options");
    desc.add_options()
        ("instruments.prop", po::value<std::string>()->multitoken()->notifier([&c](std::string const& v) {
             auto it = boost::make_split_iterator(v, boost::token_finder(boost::algorithm::is_any_of(" ,")));
             std::transform(it, {}, back_inserter(c), [](auto& s) {
                        return boost::lexical_cast<double>(s);
                     });
         }),
         "plugin names" );

    std::ifstream ifs("input.txt");
    po::variables_map vm;
    store(po::parse_config_file(ifs, desc, false), vm);
    po::notify(vm);

    std::copy(c.begin(), c.end(), std::ostream_iterator<double>(std::cout << "c: ", " "));
    std::cout << "\n";
}
coordinate c;
// Setup options.
po::options_description desc("Options");
desc.add_options()
  ("instruments.prop", po::value<coordinate>( &c )->multitoken(),
   "plugin names" );
#include <boost/program_options.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <fstream>
#include <iostream>

namespace po = boost::program_options;
typedef std::vector<double> coordinate;

int main() {
    coordinate c;

    // Setup options.
    po::options_description desc("Options");
    desc.add_options()
        ("instruments.prop", po::value<std::string>()->multitoken()->notifier([&c](std::string const& v) {
             auto it = boost::make_split_iterator(v, boost::token_finder(boost::algorithm::is_any_of(" ,")));
             std::transform(it, {}, back_inserter(c), [](auto& s) {
                        return boost::lexical_cast<double>(s);
                     });
         }),
         "plugin names" );

    std::ifstream ifs("input.txt");
    po::variables_map vm;
    store(po::parse_config_file(ifs, desc, false), vm);
    po::notify(vm);

    std::copy(c.begin(), c.end(), std::ostream_iterator<double>(std::cout << "c: ", " "));
    std::cout << "\n";
}
c: 1 2.9