使用 boost::phoenix::val 的动机?

Motivation to use boost::phoenix::val?

拜托,您能否展示 boost::phoenix::val 的使用必不可少(或至少非常方便)而不仅仅是可选的情况。 Boost 文档并没有超出

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

何时以及为什么人们更喜欢

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

而不仅仅是

t;

你不会。

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

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));

你也可以用它来强制任何对 phoenix 懒惰演员的引用:

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