C++ 如何使操作员过载<&书信电报;用于boost::program_选项的默认值输出?
我正在使用boost::program_选项,并希望将类似“域”的选项传递给我的程序。这样一个领域就是:C++ 如何使操作员过载<&书信电报;用于boost::program_选项的默认值输出?,c++,boost,boost-program-options,C++,Boost,Boost Program Options,我正在使用boost::program_选项,并希望将类似“域”的选项传递给我的程序。这样一个领域就是: template<typename T> struct CDomain { CDomain(T min = -1, T max = 1) {_min = min; _max = max;}; T _min; T _max; }; 模板 结构域 { CDomain(tmin=-1,tmax=1){u-min=min;{u-max=max;}; 杜敏; T_max; }
template<typename T>
struct CDomain
{
CDomain(T min = -1, T max = 1) {_min = min; _max = max;};
T _min;
T _max;
};
模板
结构域
{
CDomain(tmin=-1,tmax=1){u-min=min;{u-max=max;};
杜敏;
T_max;
};
我已经为这个选项类编写了一个自定义验证器,它运行良好。现在,我想添加一个默认值,如
desc.add_options()("domain", po::value<CDomain<long double> >()->default_value(CDomain<long double>(-1,1)), "domain");
desc.add_options()(“域”,po::value()->默认值(域(-1,1)),“域”);
boost::调用运算符的程序选项同样可以重新定义您的结构:
template<typename T>
struct CDomain
{
CDomain(T min = -1, T max = 1) {_min = min; _max = max;};
T _min;
T _max;
friend std::ostream& operator << (std::ostream& s, const CDomain& domain)
{
so << "[" << boost::lexical_cast<string>(d._min) << ":" << boost::lexical_cast<string>(d._max) << "]"
return s;
}
};
模板
结构域
{
CDomain(tmin=-1,tmax=1){u-min=min;{u-max=max;};
杜敏;
T_max;
friend std::ostream&operator该运算符按照我定义的方式工作-我可以随时调用它。问题是boost需要运算符。您是否尝试过这种方式以查看它是否有任何区别?您在哪里定义了运算符?我先是尝试过,但没有成功,但现在编写了最少的代码来再次测试它g很好。谢谢!我只是不明白为什么非好友类外操作符我最好的猜测是,在boost实际需要它之前,您可能没有定义它,它可能在它的一个头文件中。包含顺序的更改可能会造成这种差异。
template<typename T>
ostream& operator<<(ostream& o, CDomain<T>& d)
{
return o << "[" << boost::lexical_cast<string>(d._min) << ":" << boost::lexical_cast<string>(d._max) << "]";
}
template<typename InputStreamable>
bool shl_input_streamable(InputStreamable& input)
{
std::basic_ostream<CharT> stream(&stringbuffer);
bool const result = !(stream << input).fail();
start = stringbuffer.pbase();
finish = stringbuffer.pptr();
return result && (start != finish);
}
template<typename T>
struct CDomain
{
CDomain(T min = -1, T max = 1) {_min = min; _max = max;};
T _min;
T _max;
friend std::ostream& operator << (std::ostream& s, const CDomain& domain)
{
so << "[" << boost::lexical_cast<string>(d._min) << ":" << boost::lexical_cast<string>(d._max) << "]"
return s;
}
};