C++ 在Boost::Program_Options中,如何设置wstring的默认值?

C++ 在Boost::Program_Options中,如何设置wstring的默认值?,c++,boost,boost-program-options,C++,Boost,Boost Program Options,我下面的代码不起作用: wstring config_file; // Declare a group of options that will be // allowed only on command line po::options_description generic("Generic options"); generic.add_options() ("help,h", "produce help message") ("config,c", po::wvalue&

我下面的代码不起作用:

wstring config_file;
// Declare a group of options that will be 
// allowed only on command line
po::options_description generic("Generic options");
generic.add_options()
    ("help,h", "produce help message")
    ("config,c", po::wvalue<wstring>(&config_file)->default_value(L"DXDrv.cfg"), "name of a file of a configuration.")
    ;
wstring配置文件;
//声明一组将被删除的选项
//仅在命令行上允许
po::选项\描述通用(“通用选项”);
generic.add_options()
(“帮助,h”,“生成帮助消息”)
(“config,c”,po::wvalue(&config_文件)->默认_值(L“DXDrv.cfg”),“配置文件的名称”。)
;
编译失败,错误为:

d:\repo\a4x\u ext\minidxdriver\testapp\configparser\boost\lexical\u cast.hpp(1096):错误C2039:
'setg'
:不是
'boost::detail::lexical\u stream\u limited\u src'的成员


冗长的解释:这是因为基本的
typed\u值
type in
program\u选项
试图在将
m\u默认值设置为\u text
私有成员时,将
wchar
转换为
char
。无论出于何种原因,基本字符串类型没有必要的函数来创建正确的模板类型

幸运的是,typed_value类对default_value和implicit_value有第二个覆盖,它提供了值的字符串表示形式。这绕过了修复问题的词法转换。比如:

     tvalue< tstring >()->default_value( _T( "output.png" ), "output.png" )
tvalue()->默认值(_T(“output.png”),“output.png”)

哪个部件不工作?你期望得到什么?现在还不清楚问题出在哪里。我用错误消息更新了我的帖子。你能帮我看一些工作实例吗?非常感谢您的评论!是否有编译错误的模板实例化回溯?我找到了一些程序选项作者的帖子。文章说,库不支持wstring的默认值。为什么boost程序选项会费心将默认值转换为字符串?谁需要它?我才知道答案。程序选项需要在打印帮助信息时显示值。非常好的帖子!我有和切分音相同的问题。知道当输出值为wvalue时,为什么需要窄字符串作为默认值吗?这与帮助信息有关吗?