Advertisement
kohb96

HolderTrait2

Dec 5th, 2022
750
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.73 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. struct A
  4. {
  5.     A() { std::cout << "A"; }
  6. };
  7.  
  8. struct B
  9. {
  10.     B() { std::cout << "B"; }
  11. };
  12.  
  13.  
  14. template<int i, typename ...Ts>
  15. struct Holder {};
  16.  
  17. // Your current implementation:
  18. template<int i, typename ...Ts>
  19. void f( Holder<i, Ts...> )
  20. {
  21.     std::cout << i;
  22.     ( Ts{}, ... );
  23. }
  24.  
  25. template<typename T>
  26. struct Trait{};
  27.  
  28. template<int i, typename ...Ts>
  29. struct Trait<Holder<i, Ts...>>
  30. {
  31.     static void g()
  32.     {
  33.         std::cout << i;
  34.         ( Ts{}, ... );
  35.     }
  36. };
  37.  
  38. // Updated version with no argument
  39. template<typename HolderT>
  40. void g()
  41. {
  42.     Trait<HolderT>::g();
  43. }
  44.  
  45. int main()
  46. {
  47.     f( Holder<1, A, B, A>{} );
  48.     std::cout << "\n";
  49.     g<Holder<1, A, B, A>>();
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement