【发布时间】:2011-07-29 08:38:34
【问题描述】:
我想在 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,那么正确的实现方式是什么?
【问题讨论】:
标签: c++ foreach metaprogramming boost-fusion