我正在通过例子学习boost,但我不明白为什么下面的c++代码不能execute,我只是将int
改为uint8_t
,我错过了什么吗?
#include <stdint.h>
#include <iostream>
#include <vector>
#include <boost/program_options.hpp>
int main()
{
namespace po = boost::program_options;
const int argc = 5;
const char* argv[] = {"foo", "--data", "1", "127", "255" };
std::vector<uint8_t> databytes;
po::variables_map vm;
po::options_description cmd_options( "options" );
cmd_options.add_options()
( "data", po::value<std::vector<uint8_t>>( &databytes )->multitoken(), "DATA" );
po::store( po::parse_command_line( argc, argv, cmd_options ), vm );
po::notify( vm );
std::cout << "size: " << databytes.size() << std::endl;
for (size_t i = 0; i < databytes.size(); i++) {
std::cout << i << ": " << (int)databytes[i] << std::endl;
}
}
字符串
2条答案
按热度按时间w7t8yxp51#
我也会有我的蛋糕和吃它。@StackOverflowNeko正确指向自定义通知程序。但是,它与使用自动变量通知有点冲突。因此,如果你避免这样做,你可以隐藏转换/验证步骤:
**Live On Coliru**第一个字符
字符串
使用各种测试用例:
gr8qqesn2#
它看起来有点滑稽,但是从附加的链接(boost::program_options for single-byte variables)应用
std::numeric_cast
方法看起来像:字符串
您会注意到我仍然不能将它们存储为
std::vector<uint8_t>
,但是这种方法可以防止用户输入0-255以外的值(例如,输入256导致numeric_cast异常)。老实说,我只会手动检查值是否在范围内,而不是这样做。我认为链接文章中的结论是不要使用
uint8_t
。您可以稍后将数据转换为uint8_t
。