C ++: Шаблоны: Частичная Специализация: Печать всего шаблона - PullRequest
0 голосов
/ 05 февраля 2012

Доброго всем дня!

Имея следующий код:

template<typename T, typename OutStream = std::ostream>
struct print
{
    OutStream &operator()(T const &toPrint, OutStream &outStream = std::cout) const
    {
        outStream << toPrint;
        return outStream;
    }
};

template<typename T, typename Index = unsigned int, typename CharType = char, typename OutStream = std::ostream>
struct print<T *, Index>
{
    print(CharType delimiter = ' '): delimiter_(delimiter) {}
    OutStream &operator()(T const *toPrint, Index startIndex, Index finishIndex, OutStream &outStream = std::cout) const
    {
        for (Index i(startIndex) ; i < finishIndex ; ++i)
            outStream << toPrint[i] << delimiter_;
        return outStream;
    }
protected:
    CharType delimiter_;
};

Компилятор: MSVCPP10

Выход компилятора:

1>main.cpp(31): error C2764: 'CharType' : template parameter not used or deducible in partial specialization 'print<T*,Index>'
1>main.cpp(31): error C2764: 'OutStream' : template parameter not used or deducible in partial specialization 'print<T*,Index>'
1>main.cpp(31): error C2756: 'print<T*,Index>' : default arguments not allowed on a partial specialization

I 'Я застрял.Помогите мне закончить частичную специализацию.

Спасибо!

1 Ответ

1 голос
/ 05 февраля 2012

Полагаю, это то, что вы имеете в виду: (Это может быть неверный код, я только пытаюсь перевести то, что вы написали)

template<typename T> struct print<T*, unsigned int> {
  typedef unsigned int Index;
  typedef std::ostream OutStream;
  typedef char CharType;
  print(CharType delimiter = ' '): delimiter_(delimiter) {}
  OutStream &operator()(T const *toPrint, Index startIndex, Index finishIndex, OutStream &outStream = std::cout) const {
    for (Index i(startIndex) ; i < finishIndex ; ++i)
      outStream << toPrint[i] << delimiter_;
    return outStream;
  }
protected:
  CharType delimiter_;
};

Компилятор объясняет, что пошло не так:

аргументы по умолчанию не допускаются при частичной специализации

Значения типа typename Index = unsigned int могут появляться только в неспециализированном шаблоне.

параметр шаблона не используетсяили вычитается при частичной специализации

То есть вы должны использовать все параметры в этой части: struct print<HERE>

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