【发布时间】:2012-01-13 04:59:21
【问题描述】:
我正在创建一个模板化的 Vector 类,但是,在将其用途与 std::vector 之类的东西进行比较时,我注意到它不允许没有默认 (emtpty) 构造函数的 structs\classes。我会得到的错误是
error C2512: 'SomeStruct' : no appropriate default constructor available
: while compiling class template member function 'Vector<Type>::Vector(void)'
: see reference to class template instantiation 'Vector<Type>' being compiled
但是,如果我要使用 std::vector,这是允许的。这是我的测试用例
struct SomeStruct
{
SomeStruct(int a){}
};
template<typename Type>
class Vector
{
public:
Vector();
protected:
Type* m_Data;
unsigned int m_Count;
unsigned int m_Capacity;
};
template<typename Type>
Vector<Type>::Vector()
{
m_Capacity = 0;
m_Count = 0;
m_Data = new Type[m_Capacity];
}
void main()
{
Vector<SomeStruct> test1;
}
如何允许我的模板化 Vector 允许没有默认(空)构造函数的类型?
(我知道我可以只使用 std::vector,但我这样做是为了了解有关该语言的更多信息,并遇到这样的情况)
【问题讨论】:
-
看看标准库是怎么做的:把分配和构造分开,自己手动构造元素。然后你可以使用任何你喜欢的构造函数。
-
不得不处理新的展示位置正是您不重新发明轮子的原因——其他人已经做得更好了。
标签: c++ templates vector constructor