I have the following code:

```
template<typename T1, typename T2, typename T3, typename T4>
void Func(void); // signature

```

Simple template function with 4 template parameters. The usage of this is currently like this:

```
Func<Foo1, Foo1Helper, Foo1Client, Foo1Server>();
Func<Foo2, Foo2Helper, Foo2Client, Foo2Server>();
Func<Foo3, Foo3Helper, Foo3Client, Foo3Server>();

```

Now in the usage examples, `Foo1Helper, Foo1Client, Foo1Server, Foo2Helper, Foo2Client, Foo2Server, Foo3Helper, Foo3Client, Foo3Server` are generated classes based on the `Foo1, Foo2, Foo3` classes.

What i want to achieve is to simplify the `Func` templated function so that it can be called like this: 

```
Func<Foo1>();

```

without needing so specify also the generated classes since the name of the classes is bounded to the original class.

Do you have any suggestions on how i can achieve this?