给出以下代码:
enum Fruits{ eApple, eBanana };
template<>
struct SomeFruit< eApple > {
void eatIt() { // eat an apple };
};
template<>
struct SomeFruit< eBanana > {
void eatIt() { // eat a banana };
};
有没有一种方法可以为每个
eatIt()
调用显式专门的Fruits
,而不必手动进行每个调用?我对“手动拨打每个电话”的定义是:
void eatAllFruits()
{
SomeFruit< eApple > apple;
apple.eatIt();
SomeFruit< eBanana > banana;
banana.eatIt();
}
显然,这种方法必须在每次修改
eatAllFruits
时扩展Fruits
。 最佳答案
我现在的猜测是您要自动迭代枚举水果。实际上,有一种方法可以做到这一点。看一下我在博客上写的关于一个类似问题的文章:http://crazyeddiecpp.blogspot.com/2010/02/using-mplforeach-to-fill-tuple.html
注意mpl::range和mpl::for_each的使用。
因此,您的eatSomeFruit()函数如下所示:
// modify enum...
enum Fruits { eApple, eBananna, eFruitLast = eBananna };
struct eat_fruit
{
template < typename Index >
void operator() (Index&)
{
SomeFruit<Index::value> eater;
eater.eatIt();
}
};
void eatSomeFruit()
{
mpl::for_each< mpl::range<0, eFruitLast> >(eat_fruit());
}