簡體   English   中英

隱式轉換為模板結構?

[英]Implicit conversion to templated struct?

template <typename T>
struct Foo {
  T var;

  Foo (const T& val){
    var = val;
  }
};

template <typename T>
void print(Foo<T> func){}

int main() {
  Foo f=3;
  print(f); // Works
  print(3); // Doesn't work
} 

f是一個定義明確的Foo實例,所以很明顯它可以工作。 但是既然 3 是可轉換的(我相信是隱含的) Foo ,為什么不print(3); 工作?

如果它不是隱式轉換,我怎么能做到這一點?

我真的很想避免print(Foo(3));

模板實參推導不考慮隱式轉換(從intFoo<int> ),無法推導模板形參T導致調用失敗。

print(Foo(3));旁邊 ,您可以顯式指定模板參數以繞過模板參數推導,例如

print<int>(3);

模板參數推導不會考慮隱式轉換。 要獲得所需的調用語法,您可以像這樣為print添加重載

template <typename T>
void print(T a)        // selected if T is not a Foo specialization
{
    print(Foo{a});     // call print with a Foo explicitly
}

如果print的參數已經是Foo的特化,則將選擇采用Foo<T>的重載。

這是一個演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM