你可以嘗試這樣做,使用Boost元編程庫,但需要你改變類的模板定義,以騰出空間加速MPL參數。
你想加速做一個例子:: MPL是:
#include <boost/mpl/vector.hpp>
#include <boost/mpl/empty.hpp>
#include <boost/mpl/back.hpp>
#include <boost/mpl/pop_back.hpp>
#include <boost/mpl/if.hpp>
#include <iostream>
using namespace boost::mpl;
template<class T>
class Test {
public:
void funcToCall() {
std::cout << "I'm called\n";
}
void update();
};
template<class Y, class T>
struct Update {
static void update(T* t) {
typedef typename pop_back<Y>::type vec_less;
if (back<Y>::type::value > 0)
t->funcToCall();
Update<typename if_<empty<vec_less>, void, vec_less >::type, T>::update(t);
}
};
template<class T>
struct Update<void ,T> {
static void update(T* t) {}
};
template<class T>
void Test<T>::update() {
Update<T, Test<T> >::update(this);
}
int main() {
Test<vector<int_<0>,int_<4>, int_<9> > > t;
t.update();
return 0;
}
類「測試」將是你原來的「TemplatedClass」。現在不用獲取int模板參數的列表,只需要一個參數即boost :: mpl :: vector。這包含所有想要傳遞的整數,然後調用更新函數,該函數將遞歸調用結構「更新」中的更新方法,如果int大於0,將有責任調用「funcToCall()」方法。
我上面粘貼的程序的輸出是:
的MacBook-Pro的二馬塞羅:〜Kariddi $ ./test
我叫
我叫
當然,您需要本示例的Boost庫才能工作。
您可以找到有關MPL這裏:
http://www.boost.org/libs/mpl/doc/index.html
乾杯, 馬塞羅
固定的模板參數是多少? – 2012-07-19 13:46:39
它是固定的,(雖然可以很長) – Pierre 2012-07-19 13:48:20