繁体   English   中英

为什么参数推导在此模板模板参数中不起作用

[英]Why parameter deduction doesn't work in this template template parameter

我有以下模板函数,其中模板模板参数作为其参数。

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;推断出类型std::vector<int>::iterator it; 作为int

为什么编译器无法推断出类型?

我认为它可以从std::vector<int>::iterator it;推断出类型std::vector<int>::iterator it; 作为int。

为什么编译器无法推断出类型?

没有。

编译器不能:查找“非推导上下文”以获取更多信息。

并且期望扣除是不合理的。

假设一个类如下

template <typename T>
struct foo
 { using type = int; };

类型type 总是 int ; 无论什么是T型。

并假设功能如下

template <typename T>
void bar (typename foo<T>::type i)
 { }

接收int值( typename foo<T>::type始终为int )。

应从以下调用中推断出哪种T类型?

bar(0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM