Считайте, что у меня есть объявления функций, подобные этим:
void foo(int x, float y);
class X {
void anotherFoo(double a, int c);
};
Как я могу получить кортеж, который соответствует аргументам функции? В приведенном выше случае это будет:
boost::tuple<int, float>
boost::tuple<X*, double, int>
или даже лучше с типом результата как 0-й элемент:
boost::tuple<void, int, float>
boost::tuple<void, X*, double, int>
Я знаю, что boost :: function_types :: parameter_types
может делать именно это. Однако меня интересует принцип того, как это реализовано.