LINUX.ORG.RU

История изменений

Исправление 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;
}