Явная специализация шаблона - PullRequest
3 голосов
/ 22 января 2012

Я не хочу задавать такой общий вопрос, но следующий код - упражнение в явной специализации шаблонов.Я получаю сообщение об ошибке:

c: \ users \ *** \ Documents \ visual studio 2010 \ projects \ template array \ template array \ array.h (49): ошибка C2910: 'Array:: {ctor} ': не может быть явно специализированным

#ifndef ARRAY_H
#define ARRAY_H

template <typename t>`
class Array
{
public:
Array(int);

int getSize()
{
    return size;
}
void setSize(int s)
{
    size = s;
}
void setArray(int place, t value)
{
    myArray[place] = value;
}
t getArray(int place)
{
    return myArray[place];
}
private:
    int size;
    t *myArray;
};

template<typename t>
Array<t>::Array(int s=10)
{
    setSize(s);
    myArray = new t[getSize()];
}

template<>
class Array<float>
{
public:
    Array();
 };

template<>
Array<float>::Array()
{
    cout<<"Error";
} 

#endif

Спасибо

1 Ответ

5 голосов
/ 22 января 2012

Реализация конструктора специализации не шаблон!То есть вы просто хотите написать:

Array<float>::Array()
{
    std::cout << "Error";
}

На самом деле, кажется, что вы хотите ограничить использование вашего шаблона класса 'Array', чтобы он не использовался с 'float', в этом случае вы можете захотетьтолько объявить , но не определить свою специализацию, чтобы превратить ошибку времени выполнения в ошибку времени компиляции:

template <> class Array<float>;

Конечно, есть много вариантовкак вы можете предотвратить создание экземпляров классов.Однако создание ошибки во время выполнения - наихудший вариант.

...