3

我讨厌问这样一个笼统的问题,但以下代码是显式模板专业化的练习。我不断收到错误:

c:\users\***\documents\visual studio 2010\projects\template array\template array\array.h(49): error 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

谢谢

4

1 回答 1

5

特化构造器的实现不是模板!也就是说,你只想写:

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

实际上,您似乎想限制“Array”类模板的使用不与“float”一起使用,在这种情况下,您可能只想声明但不定义您的专业化,以将运行时错误转换为编译-时间错误:

template <> class Array<float>;

当然,有很多变体可以防止类的实例化。然而,创建运行时错误似乎是最糟糕的选择。

于 2012-01-22T14:00:56.077 回答