изваяно:
здесь tPar хранит параметр любого типа.
class tParams{
std::vector<tParA *> m_params;
tParams() {};
template<class T1>
tParams(T1 t1) {m_params.push_back(new tPar<T1>(t1));}
template<class T1, class T2>
tParams(T1 t1, T2 t2) {m_params.push_back(new tPar<T1>(t1)); m_params.push_back(new tPar<T2>(t2));}
template<class T1, class T2, class T3>
tParams(T1 t1, T2 t2, T3 t3) {m_params.push_back(new tPar<T1>(t1)); m_params.push_back(new tPar<T2>(t2)); m_params.push_back(new tPar<T3>(t3));}
template<class T1, class T2, class T3, class T4>
tParams(T1 t1, T2 t2, T3 t3, T4 t4) {m_params.push_back(new tPar<T1>(t1)); m_params.push_back(new tPar<T2>(t2)); m_params.push_back(new tPar<T3>(t3)); m_params.push_back(new tPar<T4>(t4));}
}
теперь можно делать: Command(cmdID, tParams(i,ptr,class,struct)). скучно. набор параметров и типы не проверяются. Делаем кучу фукций:
f1(int i, char *p) {Command(cmd1, tParams(i, p));}
f2(int i, char *p) {Command(cmd2, tParams(i, p));}
вопрос. как избавиться от написания кучи функций, а ограничиться определением типа:
#define f1() (int, char*) или что-то типа того.