我有以下的模板函数,它将模板模板参数作为其参数。
它按预期工作,但当我使用时出现问题
template<typename T,
template <typename... ELEM> class CONTAINER = std::vector>
void merge(typename CONTAINER<T>::iterator it )
{
std::cout << *it << std::endl;
}
以下的代码使用了这段代码。
std::vector<int> vector1{1,2,3};
merge<int>(begin(vector1));
它按预期工作,但当我使用时出现问题
merge(begin(vector1));
它无法推断出T
的类型。
我认为它可以从 std::vector<int>::iterator it;
推断出int
作为类型。
为什么编译器不能推断类型?
CONTAINER
,而是使用默认值。std :: set <int> set1 {1, 2, 3}; merge <int>(begin(set1));
[失败](http://coliru.stacked-crooked.com/a/8c7268a8bb01ed9b) - Calethdecltype(it)
中获取int
,那么可以使用std::iterator_traits<>::value_type
。例如:template <typename Iterator, typename Value = std::iterator_traits<Iterator>::value_type> void merge(Iterator it)
。 - Caleth