Добрый день,
где-то в глубине души понимаю, что нельзя основываясь на переменою времени выполнения(
Но всё же программисты могут всё )
Вопрос: Как меняя только код в main собрать в вектор execut`оры и вызвать через сигнатуру
где-то в глубине души понимаю, что нельзя основываясь на переменою времени выполнения(
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 );
}