次のコードについて考えてみます。
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可変個引数タイプを抽出し、すべてをタプルにまとめます)?もしそうなら、どのように?c
私が理解しているように、省略記号のタグを追加して、
struct ellipis_tag {};
template <class R, class... Args>
struct type<R(Args... ...)>
: function_arguments<Args..., ellipis_tag>
{};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加