请你能展示一下情况,使用boost :: phoenix :: val是必不可少的(或者至少非常方便),而不仅仅是可选的。 Boost doc并没有超出像
这样的例子std::cout<<boost::phoenix::val(3)(); //output is 3.
何时以及为何选择
boost::phoenix::val(t)();
而不仅仅是
t;
答案 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