Специализированный член класса шаблона - нет совпадений - массив - PullRequest
1 голос
/ 24 ноября 2011

У меня есть шаблон класса, который реализует функцию:

template<typename T>
class Matrix
{
...
void setItems(const T *tab)
{
    //writing content from tab to Matrix internal data 
}
...
};

Все хорошо, пока я не хочу создать специализированную функцию для char *, мой класс должен выделить память для строки и так далее. Я хотел использовать:

template<> void Matrix<char*>::setItems(const char** tab)
{
...

Проблема в том, что это не сборка:

template-id 'setItems<>' for 'void Matrix<char*>::setItems(const char**)' does not match any template declaration

До сих пор у меня не было проблем со специализированными функциями. Чего мне не хватает?

Дополнительная информация:
Я должен использовать char*

1 Ответ

2 голосов
/ 24 ноября 2011

Если T - это char *, то const T * - это char * const *.

Таким образом, ваша функция-член должна быть:

template<> void Matrix<char*>::setItems(char*const* tab)
{
  ...
}

Довольно часто можно поставитьconst после типа

void setItems(T const* tab)

, что делает его немного более очевидным, чем является расширенный тип в вашем случае.

...