我正在讨论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) );
编译器抱怨它没有运算符&lt;&lt;为了 功能表达。我该如何定义一个?
感谢。
编译错误是:
/usr/include/boost/proto/debug.hpp:146:错误:'std :: operator&lt;&lt;'中的'operator&lt;&lt;'不匹配[with _Traits = std :: char_traits](((std :: basic_ostream&gt;&amp;)((std :: basic_ostream&gt; *)std :: operator&lt;&lt; [with _Traits = std :: char_traits]((( std :: basic_ostream&gt;&amp;)((std :: basic_ostream&gt; *)std :: operator&lt;&lt; [with _Traits = std :: char_traits]((std :: basic_ostream&gt;&amp;)((std :: basic_ostream&gt; *)std :: operator&lt;&lt; [with _CharT = char,_Traits = std :: char_traits](((std :: basic_ostream&gt;&amp;)((std :: ostream *)((const boost :: proto :: functional :: display_expr *)this) - &gt; boost :: proto :: functional :: display_expr :: sout_)),std :: setw((const boost :: proto :: functional :: display_expr *)this) - &gt; boost :: proto :: functional :: display_expr :: depth_)))),(((const boost :: proto :: functional :: display_expr *)this) - &gt; boost :: proto :: functional :: display_expr :: first_?((const char *)“”):((const char *)“,”))))),boost :: proto :: tag :: proto_tag_name((boost: :proto :: tag :: terminal(),boost :: proto :: tag :: terminal()))))),((const char *)“(”))&lt;&lt; boost :: proto ::值[使用Expr = boost :: proto :: expr ns _ :: expr&gt;,0l&gt;]((const boost :: proto :: exprns _ :: expr&gt;,0l&gt;&amp;)((const boost :: proto :: exprns _ :: expr&gt;,0l&gt; *)表达式)))'
答案 0 :(得分:2)
这是哪个proto版本?最新的不需要&lt;&lt;再过载,默认为typeid,以便在需要时显示名称。你能发布实际的错误信息吗?