Проблема создания экземпляра структуры шаблона - PullRequest
3 голосов
/ 30 августа 2011

Как создать экземпляр этой структуры шаблона?

template<typename T,
  template<typename, template <typename> class D= std::allocator
           >class Z=std::vector
         >

struct amen
{
    Z<T,D<T> > cc; // i know D template class parameter is not visible , how do i do it?
};

int main(){
amen<int> moreAmen;
}

Может кто-нибудь показать мне, как это сделать?

1 Ответ

6 голосов
/ 30 августа 2011

Вы ошиблись. Должно быть

template<typename U, typename D = std::allocator<U>
         > class Z = std::vector

Распределитель std::vector не является шаблоном. Тогда объявление cc становится

Z<T> cc;

Поскольку вы указали аргумент по умолчанию для распределителя, вам не нужно передавать для него никакого аргумента. Если вы хотите, вам нужно будет передать std::allocator<T> или какой-либо другой распределитель снова

Z<T, std::allocator<T> > cc;
// or T<T, my::funny:allocator> cc;

Аргумент по умолчанию для параметра аргумента шаблона шаблона не «наследуется» для соответствующего параметра шаблона вашего шаблона класса / структуры. Вам нужно указать его снова, как указано выше (указав std::allocator<U> в качестве аргумента шаблона по умолчанию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...