gpt4 book ai didi

boost::program_options :当属于命名空间时如何声明和验证我自己的选项类型?

转载 作者:行者123 更新时间:2023-12-01 11:59:09 25 4
gpt4 key购买 nike

使用 boost::program_options,当它在命名空间内声明时,我无法获得自己的选项类型进行编译。但是在命名空间之外它编译并工作正常:

#include <boost/program_options.hpp>
using namespace boost;
using namespace boost::program_options;

struct my_type1 {
my_type1(int nn) : n(nn) {}
int n;
};
namespace nm {
struct my_type2 {
my_type2(int nn) : n(nn) {}
int n;
};
}

void validate(boost::any& v,
const std::vector<std::string>& values,
my_type1*, int) {
const std::string& s = validators::get_single_string(values);
v = any(my_type1(lexical_cast<int>(s)));
}
void validate(boost::any& v,
const std::vector<std::string>& values,
nm::my_type2*, int) {
const std::string& s = validators::get_single_string(values);
v = any(nm::my_type2(lexical_cast<int>(s)));
}

int main() {
options_description desc("options");
desc.add_options()
("m1", value<my_type1>() , "")
("m2", value<nm::my_type2>(), "")
;
return 0;
}

在 main() 中,选项 'm1' 的声明编译但 'm2' 不...什么不见​​了 ?我在 gcc 4.4.4 版中使用 boost_1_43_0。

最佳答案

验证函数应该和你的结构 my_type 在同一个命名空间中,更改为:

  namespace nm  {
void validate(boost::any& v,
const std::vector<std::string>& values,
my_type2*, int) {
const std::string& s = validators::get_single_string(values);
v = any(my_type2(lexical_cast<int>(s)));
}
}

它为我编译。

关于boost::program_options :当属于命名空间时如何声明和验证我自己的选项类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com