使用boost :: phoenix :: val?

时间:2015-05-30 09:42:53

标签: c++ boost boost-phoenix

请你能展示一下情况,使用boost :: phoenix :: val是必不可少的(或者至少非常方便),而不仅仅是可选的。 Boost doc并没有超出像

这样的例子
std::cout<<boost::phoenix::val(3)();   //output is 3.

何时以及为何选择

boost::phoenix::val(t)();

而不仅仅是

t;

1 个答案:

答案 0 :(得分:2)

你不会。

如果你需要一个(懒惰)可调用的话,你会更喜欢它:

template <typename F>
void print_three_times(F f) {
    std::cout << 3*f() << "\n";
}

现在您可以使用

进行调用
print_three_times(phx::val(3));

int i;
std::cin >> i;
print_three_times(phx::val(i));

你也可以用它来强迫任何对凤凰懒惰演员的引用:

std::cout << 3; // not an actor
std::cout << val(3); // a lazy actor