簡體   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