2015-05-03 4 views
4

Если заголовок не имеет смысла, вот суть проблемы:Частичная специализация параметров шаблона шаблон с переменным числом параметров

template <template <class> class ContainerOf> 
class Foo; 

template <> 
class Foo<boost::optional> // works! 
{ 
    // ... 
}; 

// ERROR! std::vector takes two parameters 
// T and Alloc. 
template <> 
class Foo<std::vector> 
{ 
    // ... 
}; 

В Ессенции я хочу специализироваться для различных шаблонов, которые принимают параметр одного типа. Тем не менее, многие шаблоны в STL и других местах имеют другие параметры, такие как Allocators и Compare (например, std :: map). Меня это не волнует. Я хочу специализироваться на std :: vector с «дыркой», где T.

Мысли? Я чувствую, что мне нужны какие-то объекты-обертки или какое-то косвенное отношение для достижения этого - это также, вероятно, изменит способ создания экземпляров этих шаблонов.

+0

является 'шаблон <имяТипа класс ContainerOf>' опечатка? –

+0

да извините. исправит –

+0

Я вижу, что вы пытаетесь сделать. И, если мое понимание правильное, я скажу вам, что самый простой способ - принять пару итераторов (диапазон), так как большинство функций/классов работают на C++. – edmz

ответ

2

В C++ 11 вы можете использовать variadics:

template <template<typename T, typename...> class ContainerOf> 
class Foo; 
+1

Очевидно, что 'template