这是我的(剥离的)类和一个对象的实例化:
template <typename T, typename Allocator = std::allocator<T> >
class Carray {
typedef typename Allocator::size_type size_type;
// ...
explicit Carray(size_type n, const T& value, const Allocator& alloc = Allocator()) {
// ...
}
template<typename InputIterator>
Carray(InputIterator first, InputIterator last, const Allocator& alloc = Allocator()) {
// ...
}
// ...
}
Carray<int> array(5, 10);
我希望这会调用Carray(size_type, const T&, const Allocator&)
构造函数,但事实并非如此。显然这决心template<typename InputIterator> Carray(InputIterator, InputIterator, const Allocator&)
。
我应该改变什么才能使这项工作按预期进行?我也觉得这很奇怪,因为调用 tostd::vector<int> v(5, 10)
工作得很好。如果我查看 GCC 实现中构造函数的定义,我会发现这一点(我重命名了一些编译器实现名称,例如 __n
):
template<typename T, typename A = std::allocator<T> >
class vector {
typedef size_t size_type;
typedef T value_type;
typedef A allocator_type;
// ...
explicit vector(size_type n, const value_type& value = value_type(), const allocator_type& a = allocator_type());
template<typename InputIterator>
vector(InputIterator first, InputIterator last, const allocator_type& a = allocator_type());
// ...
};
这似乎是一样的。