fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. typedef bool (*fnPkCheck)(void);
  5.  
  6. template<int N>
  7. struct data {
  8. fnPkCheck checkers[N];
  9. };
  10.  
  11. template<fnPkCheck ... A>
  12. class packet
  13. {
  14. public:
  15. packet() : m_data {{A...}}
  16. { }
  17.  
  18. bool check() {
  19. for (int i = 0; i < sizeof(m_data.checkers) / sizeof(fnPkCheck); i++) {
  20. if (!m_data.checkers[i]())
  21. return false;
  22. }
  23. return true;
  24. }
  25.  
  26. private:
  27. const data<sizeof...(A)> m_data;
  28. };
  29.  
  30. bool check1() {
  31. std::cout << __FUNCTION__ << "\n";
  32. return true;
  33. }
  34.  
  35. bool check2() {
  36. std::cout << __FUNCTION__ << "\n";
  37. return true;
  38. }
  39.  
  40. bool check3() {
  41. std::cout << __FUNCTION__ << "\n";
  42. return true;
  43. }
  44.  
  45. int main() {
  46. // your code goes here
  47. packet<check1, check2> c1;
  48. packet<check3, check1, check2, check2, check3> c2;
  49. c1.check();
  50. c2.check();
  51. return 0;
  52. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
check1
check2
check3
check1
check2
check2
check3