我想在 boost::fusion::vector 的所有元素上调用一个函数。元素的类型如下:
class A {
...
void print_with_prefix(const char *prefix) {
std::cout << prefix << *this;
}
};
可以通过以下方式在每个元素上调用此函数:
// Call print_with_prefix() on a boost::fusion sequence:
struct CallPrintWithPrefix {
const char *prefix_;
CallPrintWithPrefix(const char *prefix) : prefix_(prefix) {}
template <class T> void operator()(T &element) const {
element.print_with_prefix(prefix);
}
}
template <class BoostFusionVector>
void print_all(BoostFusionVector &v, const char *prefix) {
boost::fusion::for_each(v, CallPrintWithPrefix(prefix));
}
然而,这种print_all()
包含辅助类的实现非常丑陋,而且看起来过于复杂!假设允许 C++0x,那么实现它的正确方法是什么?