fork download
  1. #include <iostream>
  2. #include <memory>
  3. #include <tuple>
  4.  
  5.  
  6. struct Dynamic
  7. {
  8. virtual ~Dynamic() {}
  9. };
  10.  
  11. template<typename A, typename B>
  12. struct Generic : Dynamic
  13. {
  14. Generic()
  15. {
  16. std::cout << __PRETTY_FUNCTION__ << std::endl;
  17. }
  18. };
  19.  
  20.  
  21. template<typename A, typename B>
  22. std::unique_ptr<Dynamic> Make()
  23. {
  24. return std::unique_ptr<Dynamic>(new Generic<A, B>());
  25. }
  26.  
  27.  
  28. template<typename A>
  29. std::unique_ptr<Dynamic> Make(char b)
  30. {
  31. switch (b)
  32. {
  33. case 'i':
  34. {
  35. return Make<A, int>();
  36. }
  37. case 'u':
  38. {
  39. return Make<A, unsigned>();
  40. }
  41. default: throw 0;
  42. }
  43. }
  44.  
  45.  
  46. std::unique_ptr<Dynamic> Make(char a, char b)
  47. {
  48. switch (a)
  49. {
  50. case 'i':
  51. {
  52. return Make<int>(b);
  53. }
  54. case 'u':
  55. {
  56. return Make<unsigned>(b);
  57. }
  58. default: throw 0;
  59. }
  60. }
  61.  
  62.  
  63. int main()
  64. {
  65. Make('i', 'i');
  66. Make('i', 'u');
  67. Make('u', 'i');
  68. Make('i', 'i');
  69. }
Success #stdin #stdout 0s 3064KB
stdin
Standard input is empty
stdout
Generic<A, B>::Generic() [with A = int, B = int]
Generic<A, B>::Generic() [with A = int, B = unsigned int]
Generic<A, B>::Generic() [with A = unsigned int, B = int]
Generic<A, B>::Generic() [with A = int, B = int]