fork download
  1. #include <cstdint>
  2. #include <array>
  3. #include <memory>
  4. #include <utility>
  5.  
  6. template <typename kernel_type, typename... kernel_types>
  7. class MyObsKernel
  8. {
  9. public:
  10. MyObsKernel(typename std::tuple_element<0, std::tuple<kernel_types...>>::type, kernel_type, int, int) {}
  11. };
  12. template <typename kernel_type, typename... kernel_types>
  13. class MyKernel { public: MyKernel(int , int ) {} };
  14.  
  15. template <typename kernel_type, typename ... kernel_types>
  16. class MetaKernel : public MyKernel<kernel_type, kernel_types...> {
  17. public:
  18.  
  19. MetaKernel (unsigned int m, unsigned int n, const kernel_type& kernel_, const kernel_types&... kernels_) :
  20. MyKernel<kernel_type, kernel_types...>(m, n),
  21. Ks({std::unique_ptr<MyObsKernel<kernel_type, kernel_types...> >(new MyObsKernel<kernel_type, kernel_types...>(kernels_, kernel_, m, n))...})
  22. {
  23. }
  24. private:
  25. std::array<std::unique_ptr< MyObsKernel<kernel_type, kernel_types...>>, sizeof...(kernel_types)> Ks;
  26. };
  27.  
  28. int main()
  29. {
  30. MetaKernel<int, char, char> m(42, 42, 42, '*', '*');
  31. return 0;
  32. }
  33.  
Success #stdin #stdout 0s 3424KB
stdin
Standard input is empty
stdout
Standard output is empty