1

我目前正在尝试使以下非常简单boost::phoenix::lambda的编译:

#include <iostream>

#include <boost/phoenix/scope.hpp>

int main() {
    boost::phoenix::lambda[std::cout << "Lambda!!"]();
}

但是,这会产生大量错误(此处无法发布),对我来说没有任何意义。以下是编译器输出的摘录:

error: 'std::ios_base::ios_base(const std::ios_base&)' is private 
       within this context
error: initializer for 
       'boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, 
        boost::proto::argsns_::term<boost::phoenix::vector0<> >, 0l>::proto_child0 
        {aka boost::phoenix::vector0<>}' must be brace-enclosed

我在带有 Boost 1.53.0 的 Windows XP 上使用 MinGW 4.7.2 编译这些。我究竟做错了什么?

4

1 回答 1

4

首先,总是

#include <boost/phoenix/phoenix.hpp>

除非你知道你在做什么。

其次,您需要将任一操作数operator<<设为凤凰终端,否则,它将只是

std::cout << "Lambda!!"

这是类型的表达std::ostream&...

现在,你可以做任何事,真的,例如

phx::ref(std::cout) << "Lambda!!"

或者

std::cout << phx::val("Lambda!!")

要么编译。

于 2013-06-09T14:28:14.400 回答