C++ 如何使操作员过载<&书信电报;用于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; }

我正在使用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;
};
我已经为这个选项类编写了一个自定义验证器,它运行良好。现在,我想添加一个默认值,如

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;
  }
};