Расширить типы полей структуры в вариативные c аргументы шаблона - PullRequest
0 голосов
/ 11 июля 2020

Допустим, у меня есть такая структура:

struct Foo {
    int a;
    float b;
    bool c;
};

И шаблонная функция вроде этой:

template<typename ...Ts> void func();

Как я могу написать функцию, которая вызывает func() с использованием поля Foo типы, например: expand<Foo>(); // will call func<int,float,bool>();

1 Ответ

0 голосов
/ 11 июля 2020

Реализация для Rikus Honey идеи, работает с c++17 или выше

, если вы можете иметь член кортежа в своей структуре с типами, которые вам нужны;

вы можете сделать как показано ниже;

   struct Foo 
    {
        std::tuple<int, float, bool> tpl_;
    };

template <class...Ts>
void test( Ts... ) {}

int main()
{
    Foo f;
    
    std::apply( []( auto&&...args ) { test( args... ); }, f.tpl_ );

}

хорошая точка @user975989

...