我想運行一個編譯時的迭代器,如:模板化的迭代傳遞<N>回調函數
meta::reverse_iterator<2, 9>::iterate(callback());
meta::reverse_iterator<4, 7>::iterate(callback());
std::cout << "-----------------" << std::endl;
meta::iterator<2, 9>::iterate(callback());
meta::iterator<4, 7>::iterate(callback());
struct callback {
template <int i>
void operator()() {
std::cout << "print !!" << i << std::endl;
}
};
這是怎麼我寫的元迭代器:
namespace meta {
template <int Begin, int End, bool done = false>
struct reverse_iterator {
template <typename F>
static void iterate(F f) {
f.template operator()<End>();
reverse_iterator<Begin, End-1, Begin == End-1>::iterate(f);
}
};
template <int Begin, int End>
struct reverse_iterator<Begin, End, true> {
template <typename F>
static void iterate(F) {}
};
template <int Begin, int End, bool done = false>
struct iterator {
template <typename F>
static void iterate(F f) {
iterator<Begin, End - 1, Begin == End - 1>::iterate(f);
f.template operator()<End - 1>();
}
};
template <int Begin, int End>
struct iterator<Begin, End, true> {
template <typename F>
static void iterate(F) {}
};
}
權現在我迭代器調用operator()<N>
但我希望它能夠調用用戶提供的任何函數與模板參數<N>
(不作爲運行時參數)如何可以實現?
也boost::bind
不能與它一起工作,因爲它調用綁定的函數對象而不是真正的函數。所以應該有一些方法來將默認參數傳遞給所提供的功能。
你想一個boost :: mpl :: for_each類似的東西? http://www.boost.org/doc/libs/1_51_0/libs/mpl/doc/refmanual/for-each.html –
'boost :: mpl :: for_each'事情不會這樣做。它將'N'作爲運行時參數傳遞。我希望作爲模板參數 –