[英]Implicit type conversion in c++ template
我有一個功能模板:
template<typename T>
void fun(T a, T b){
.......
}
int a = 0;
double b = 1.2;
f(a, b);
可以自動轉換為雙倍?
可以自動轉換為雙倍?
不,因為在fun<int>
和fun<double>
,當在模板參數推斷中推導出T
的類型時,它是不明確的。
你可以顯式地指定模板參數,使a
隱式轉換為double
:
int a = 0;
double b = 1.2;
fun<double>(a, b);
或添加顯式轉換,以使模板參數推斷明確:
int a = 0;
double b = 1.2;
fun(static_cast<double>(a), b);
不,它不能。 在模板扣除過程中沒有完成轉換。 在這種情況下,我們從a
和b
獨立地推導出T
,得到a
為b
int
和為b
得到的double
- 因為我們推導出T
是兩種不同的類型,即推導失敗。
如果你想做轉換,最簡單的事情就是自己明確地做:
f(static_cast<double>(a), b);
或者明確地將模板參數提供給f
以便不進行演繹:
f<double>(a, b);
如果您的意圖是將參數a
轉換為參數b
類型,則可以使用以下模板而不是您的模板:
template<typename Ta, typename T>
void fun(Ta aTa, T b) {
T& a = static_cast<T>(aTa);
/* ... a and b have the same type T ... */
}
int a = 0;
double b = 1.2;
fun(a, b); // works fine
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.