abelenky
abelenky

Reputation: 64682

Making a template that requires a template

I am trying to make a templated class that only works on other templated classes.

My attempt looks like:

template<typename T<K,V>, size_t COUNT>
class DoubleTemplate { ..... };

But this give a compiler error where I try to specify T<K,V>.

Is there a good way to require that the typename can only be a template on two params?

Upvotes: 0

Views: 32

Answers (1)

vsoftco
vsoftco

Reputation: 56547

What you need is

 template <template<typename, typename> class T, size_t count> 
 class DoubleTemplate { ... };

Example:

#include <iostream>
#include <cstddef>

template <typename K, typename V>
class Foo {};

class Bar {};

template <template<typename, typename> class T, std::size_t COUNT>
class DoubleTemplate {}; // you need class T, not typename T, to be corrected in C++17

int main()
{
    DoubleTemplate<Foo, 10> dt;
    // DoubleTemplate<Bar, 20> dt2; //oops, Bar is not a 2-param template class
}

Upvotes: 2

Related Questions