0
boost::program_options::variables_map
을 편집하여 첫 번째 위치 옵션에 따라 암시 된 옵션을 추가하려고합니다. 그러나 boost::variables_map
에서 사용할 때 po::store
을 사용하면 두 번째로 작동하지 않습니다. 여기 `boost :: program_options`는`variables_map`에서`store`를 두 번 사용할 수 없습니다
dummy-int 3
verbose
dummy-int 3
verbose
, 옵션 dummy
:
#include <boost/program_options.hpp>
#include <iostream>
#include <ostream>
#include <string>
#include <vector>
namespace po = boost::program_options;
std::ostream &operator<<(std::ostream &s, po::variables_map const &vm)
{
for (const auto& it : vm)
{
s << it.first.c_str() << " ";
auto& value = it.second.value();
if (auto v = boost::any_cast<char>(&value))
s << *v;
else if (auto v = boost::any_cast<short>(&value))
s << *v;
else if (auto v = boost::any_cast<int>(&value))
s << *v;
else if (auto v = boost::any_cast<long>(&value))
s << *v;
else if (auto v = boost::any_cast<std::string>(&value))
s << *v;
else if (auto v = boost::any_cast<std::vector<std::string>>(&value))
{
s << "[";
for(const auto &w : *v)
s << " " << w;
s << " ]";
}
else
s << "<?>";
s << '\n';
}
return s;
}
int main(int argc, char **argv)
{
po::options_description desc("Options");
desc.add_options()
("help","show this help message")
("verbose","print extra messages")
("dummy","pointless")
("dummy-int", po::value<int>(), "pointless")
("dummy-str", po::value<std::string>(), "pointless")
;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
bool verbose = vm.count("verbose");
if(verbose)
std::cout << vm << std::endl;
if(vm.count("help"))
{
std::cout << desc << std::endl;
return 0;
}
const char* newOption = "--dummy";
po::store(po::parse_command_line(1, &newOption, desc), vm);
po::notify(vm);
if(verbose)
std::cout << vm << std::endl;
return 0;
}
건물을하고 프로그램을 실행, 나는 터미널에 볼 수 있습니다 vm
에! 왜 찾을 수 있도록 도와 주실 수 있습니까? 어떤 도움을 주셔서 감사합니다!
고마워요! 질문에 답을 표시 할 수 있도록 대답에서 말 했어야합니다 ... –
완료 :) 지금은 중복되어 있기 때문에 주석을 삭제하고 거기에 오타가 있음을 발견했습니다. –