1

我正在阅读 boost-proto 教程,并在惰性 pow 函数示例中遇到了这个问题。这是示例代码:

// Define a pow_fun function object
template<int Exp> // , typename Func>
struct pow_fun
{
    typedef double result_type;
    double operator()(double d) const
    {
        return pow(d, Exp);
    }
};

// Define a lazy pow() function for the calculator DSEL.
// Can be used as: pow< 2 >(_1)
template<int Exp, typename Arg>
typename proto::result_of::make_expr<
    proto::tag::function  // Tag type
  , pow_fun<Exp>          // First child (by value)
  , Arg const &           // Second child (by reference)
>::type const
mypow(Arg const &arg)
{
    return proto::make_expr<proto::tag::function>(
        pow_fun<Exp>()    // First child (by value)
      , boost::ref(arg)   // Second child (by reference)
    );    
}

现在,如果我尝试

proto::display_expr( mypow<2>(_1) );

编译器抱怨它没有 operator<< 用于函数表达式。我如何定义一个?

谢谢。

编译器错误是:

display_expr::first_ ? ((const char*)"") : ((const char*)", "))))), boost::proto::tag::proto_tag_name((boost::proto::tag::terminal(), boost::proto::tag::terminal())))), ((const char*)"(")) << boost::proto::value [with Expr = boost::proto::exprns_: :expr >, 0l>](((const boost::proto::exprns_::expr >, 0l>&)((const boost::proto::exprns_::expr >, 0l>*)expr))) '</p>

4

1 回答 1

2

这是哪个原型版本?最新版本不再需要 << 重载,如果需要,默认使用 typeid 来显示名称。你能发布实际的错误信息吗?

于 2011-11-25T06:50:43.503 回答