Удобно таскать с каждым темплейтоклассом типы с которыми он специализируется. Но с variadic template-ми что-то не выходит. ЧЯДНТ?
#include <iostream>
#include <functional>
using namespace std;
template <typename... Args>
class Func;
template <typename T, typename... Args>
class Func<T(Args...)> {
public:
using RetT = T;
using FunctionT = function<T(Args...)>;
using ArgsT = Args; // <-- error
};
template <typename T>
class FuncBox {
public:
typename T::FunctionT func;
typename T::RetT call(typename T::ArgsT... args) {
return func(args...);
}
};
int main() {
FuncBox<Func<int(float)>> w;
w.func = [] (float x) -> int {
cout << x << endl;
return 4;
};
w.call(7);
return 0;
}