使用 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
拜托,您能否展示 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