История изменений
Исправление Begemoth, (текущая версия) :
Variadic templates можно использовать для вытаскивания типов аргументов из объявления? Каким образом
Так же как и обычные аргументы шаблона - в частичных специализациях шаблона:
template<typename C, typename F> struct MakeMemberPointer;
template<typename C, typename R, typename... Args>
struct MakeMemberPointer<C, R(Args...)>
{
typedef R (C::*type) (Args...);
};
// Пример использования:
#include <iostream>
#include <typeinfo>
struct S { };
int main()
{
std::cout << typeid(MakeMemberPointer<S, void(int)>::type).name() << std::endl;
}
/*
> g++ -o foo -std=c++11 foo.cc
> ./foo | c++filt -t
void (S::*)(int)
*/
Исходная версия Begemoth, :
Variadic templates можно использовать для вытаскивания типов аргументов из объявления? Каким образом
Так же как и обычные аргументы шаблона - в частичных специализациях шаблона:
template<typename C, typename F> struct MakeMemberPointer;
template<typename C, typename R, typename... Args>
struct MakeMemberPointer<C, R(Args...)>
{
typedef R (C::*type) (Args...);
};
// Пример использования:
#include <iostream>
#include <typeinfo>
struct S { };
int main()
{
std::cout << typeid(MakeMemberPointer<S, void(int)>::type).name() << std::endl;
}