Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 517557

Перевод вектора в последовательность - С++ для начинающих

$
0
0
Добрый день,

где-то в глубине души понимаю, что нельзя основываясь на переменою времени выполнения( std::vector<void(*) > arr; ) определить построения кода на этапе компиляции( void sequence( Args... args) ).

Но всё же программисты могут всё )
Вопрос: Как меняя только код в main собрать в вектор execut`оры и вызвать через сигнатуру void sequence( Args... args) их как функторы



Код:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


/////////////////////////////////////////////////////////////////////////////
void a() {    cout << "a()" << endl;    }
void b() {    cout << "b()" << endl;    }
void c() {    cout << "c()" << endl;    }
/////////////////////////////////////////////////////////////////////////////
template <typename Fn>
void call( Fn fn )
{
    fn();
}
template <typename...Args>
void sequence( Args... args)
{
    using t = int[sizeof...(Args)];
    cout << "start" << endl;
    (void)t
    {
        ( call( std::forward<Args>( args ) ), 0)...
    };
}
/////////////////////////////////////////////////////////////////////////////
void main()
{   
    std::vector<void(*) > arr;
    arr.push_back( a );
    arr.push_back( b );
    arr.push_back( a );
    for(int i = 0; i < 3; ++i)
        arr.push_back( c );


    //sequence( a, b, c );
 
}


Viewing all articles
Browse latest Browse all 517557

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>