mercredi 12 décembre 2018

How does this variadic template with using work?

I have this code snippet and trying to understand how it works:

class GenBase
{
public:
    void BaseClass()
    {
        std::cout << " BaseClass " << std::endl;
    }
};

template <class Base>
class General: public Base
{
    public:
        void PrintGeneral()
        {
            std::cout << " General " << std::endl;
        }
};

template <typename... Types>
struct BaseHelper;

template <typename Type, typename... Types>
struct BaseHelper< Type, Types...>
{
    using BaseType = General<typename BaseHelper<Types... >::BaseType>;
};

template <typename Type>
struct BaseHelper<Type>
{
    using BaseType = General<GenBase>;
};

template <typename... Types>
class OurClass: public BaseHelper<Types...>::BaseType
{
public:
     void print_smth()
     {
        BaseType::PrintGeneral();
     }

private:
     using BaseType = typename BaseHelper<Types...>::BaseType;
};

class Test
{
  public:
      void foo();
}

  1. using BaseType = General<typename BaseHelper<Types... >::BaseType>

    Why do we need ::BaseType at the end?

  2. What type would BaseType contain in OurClass if we instantiate it with OurClass<int,float,Test>?

Aucun commentaire:

Enregistrer un commentaire