0

考慮下面的代碼:獲取參數類型C99的可變參數函數

template <class... Args> 
struct function_arguments 
{ 
    using tuple = std::tuple<Args...>; 
}; 

template <class> 
struct function_traits 
: function_arguments<> 
{}; 

template <class R, class... Args> 
struct type<R(Args...)> 
: function_arguments<Args...> 
{}; 

template <class R, class... Args> 
struct type<R(Args... ...)> 
: function_arguments<Args...> 
{}; 

和下面的函數聲明:

int f(int x, int y, int z); 
int g(int x, int y, int z, ...); 

沒有問題function_traits<decltype(f())>::tuple會返回一個元組的所有參數類型它。有沒有辦法爲C99可變參數函數做同樣的事情(提取參數... + C99可變參數類型並將所有東西放在一個元組中)?如果是這樣,怎麼樣?Ç

回答

1

據我所知,你可以添加一個標籤爲省略號,做

struct ellipis_tag {}; 

template <class R, class... Args> 
struct type<R(Args... ...)> 
: function_arguments<Args..., ellipis_tag> 
{};