2015-05-30 88 views
1

请问,您能否展示使用boost :: phoenix :: val不可或缺(或者至少非常方便)的情况,而不仅仅是可选的。加速文档并不远远超出例子像使用boost :: phoenix :: val的动机?

std::cout<<boost::phoenix::val(3)(); //output is 3. 

时候和为什么一个宁可

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

,而不是仅仅

t; 

回答

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 
+0

嗯,还有2个问题我应该马上要求:1)是boost :: phoenix :: val主要用于串联std :: co UT? 2)它可以与非POD类型一起使用吗? – alxprogger

+0

1)否2)是的,它会复制该值。 – sehe

相关问题