Я могу легко захватить и перечислить параметры метода или функции, используя шаблон с переменными значениями, например:
template<typename RT, typename ...Args>
class MyFunctor< RT (*)(Args ... args)>
{
//Count the number of arguments
static constexpr int const arity=sizeof ...(Args);
//Create something to store the arguments in
std::tuple<Args...> _arguments;
}
Затем я могу создать шаблонные методы, которые могут перебирать список аргументов и в конечном итоге вызывать указатель на реальную функцию, используя кортеж _agrument.
Я понимаю, что конструкторы безымянные, но они также без типов? Есть ли способ получить «тип» конструктора, чтобы я мог сделать нечто похожее на то, что я могу сделать с функциями и методами?
В C ++ 03 я мог захватить тип конструктора с помощью следующего (используя GCC 3.3):
TypeDefT< typeof( MyClass::MyClass(int i) ) *>
Поместив синтаксис указателя после оператора typeof (), я мог бы затем обработать сигнатуру конструктора как тип обычного указателя на функцию.
Затем я бы добавил метод create в шаблон FunctionPointer, который затем мог бы вызываться с простым списком параметров, и мог бы появиться новый MyClass (p1, p2, p3).
Тем не менее, кажется, что в C ++ 17 нет способа получить тип конструктора, как я мог бы в C ++ 03 или в функциях в C ++ 17. Есть ли способ сделать это?
Спасибо