1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
template<class... T>
class AFaire{}
template <typename ReturnType, typename... ArgsTypes>
class Function : public FunctionBase
{
public:
virtual std::string execute(const std::string ¶ms)
{
std::istringstream iss(params);
ReturnType ret = ExecuteImpl<AFaire<ArgsTypes...>>::exec(iss, m_function);
}
private:
template<class ArgsAFaire>
class ExecuteImpl;
template<>
class ExecuteImpl< AFaire<> >
{
template<class... ArgsFaits>
static ReturnType exec(std::istringstream& stream, ReturnType (*function)(ArgsTypes...), ArgsFaits... faits)
{
return function(stream, faits..., actuel);
}
};
template<class Actuel, class... ArgsAFaire>
class ExecuteImpl< AFaire<Actuel, ArgsAFaire...> >
{
template<class... ArgsFaits>
static ReturnType exec(std::istringstream& stream, ReturnType (*function)(ArgsTypes...), ArgsFaits... faits)
{
Actuel actuel;
stream >> actuel;
return ExecuteImpl< AFaire<ArgsAFaire...> >(stream, function, faits..., actuel);
}
};
}; |
Partager