Home > Net >  Creating functions for each variadic template type
Creating functions for each variadic template type

Time:10-20

I have several functions for a class which do the exact same thing but with a different type.

class ExampleWrapper
{
public:
    operator T1() { ... }
    operator T2() { ... }
    operator T3() { ... }
};

Is it possible to combine these into a single template parameter:

class ExampleWrapper : public Wrapper<T1, T2, T3>
{
   // does the same as above
};

Bonus: Do you think this that having these functions explicitly there (perhaps with a proper name) is more readable?

Edit:
T1, T2, T3 are some types specified by some API.

CodePudding user response:

Since we don't have reflection or template for yet, you can use variadic inheritance to compose a type with all the member function we need.

Let's start with the one type case:

template<typename T>
struct Wrapper {
    operator T() { ... }
};

We can now inherit multiple times from this struct using pack expansion:

template<typename... Ts>
struct WrapperVariadic : Wrapper<Ts>... {};

Then, inherit from that:

struct HaveManyWrappers : WrapperVariadic<T1, T2, T3> {
    // ...
};
  •  Tags:  
  • c
  • Related