Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <typename Bound>
- Bound::result_type callFromAnyList(Bound b, list<any> p)
- {
- }
- double myFunc(string s, int i)
- {
- return -3.0;
- }
- list<any> p;
- p.push_back((string)"Hello");
- p.push_back(7);
- double result = callFromAnyList(bind(myFunc, _1, _2), p);
- template<typename>
- struct return_of;
- template<typename R>
- struct return_of<R(*)()> {
- typedef R type;
- };
- template<typename R, typename P1>
- struct return_of<R(*)(P1)> {
- typedef R type;
- typedef P1 parameter_1;
- };
- void foo(int);
- template<typename Func>
- typename return_of<Func>::parameter_1 bar(Func f) {
- return 42;
- }
- // call: bar(foo);
- void invoke(void (f)(), list<any>& params)
- {
- f();
- }
- template <typename R>
- void invoke(R (f)(), list<any>& params)
- {
- params.push_front(f());
- }
- template <typename T0>
- void invoke(void (f)(T0), list<any>& params)
- {
- T0 t0 = any_cast<T0>(*params.begin()); params.pop_front();
- f(t0);
- }
- template <typename R, typename T0>
- void invoke(R (f)(T0), list<any>& params)
- {
- T0 t0 = any_cast<T0>(*params.begin()); params.pop_front();
- params.push_front(f(t0));
- }
- template <typename T0, typename T1>
- void invoke(void (f)(T0, T1), list<any>& params)
- {
- T0 t0 = any_cast<T0>(*params.begin()); params.pop_front();
- T1 t1 = any_cast<T1>(*params.begin()); params.pop_front();
- f(t0, t1);
- }
- template <typename R, typename T0, typename T1>
- void invoke(R (f)(T0, T1), list<any>& params)
- {
- T0 t0 = any_cast<T0>(*params.begin()); params.pop_front();
- T1 t1 = any_cast<T1>(*params.begin()); params.pop_front();
- params.push_front(f(t0, t1));
- }
- template <typename T0, typename T1, typename T2>
- void invoke(void (f)(T0, T1, T2), list<any>& params)
- {
- T0 t0 = any_cast<T0>(*params.begin()); params.pop_front();
- T1 t1 = any_cast<T1>(*params.begin()); params.pop_front();
- T2 t2 = any_cast<T2>(*params.begin()); params.pop_front();
- f(t0, t1, t2);
- }
- template <typename R, typename T0, typename T1, typename T2>
- void invoke(R (f)(T0, T1, T2), list<any>& params)
- {
- T0 t0 = any_cast<T0>(*params.begin()); params.pop_front();
- T1 t1 = any_cast<T1>(*params.begin()); params.pop_front();
- T2 t2 = any_cast<T2>(*params.begin()); params.pop_front();
- params.push_front(f(t0, t1, t2));
- }
Add Comment
Please, Sign In to add comment