[英]Type deduction only template
我有一個這樣定義的功能模板:
// #1
template <typename R, typename T>
R func(T arg) { ... }
// #2
template <typename T>
T func(T arg) { ... }
我希望T類型始終由編譯器扣除,以便:
func<int>(my_var); // calls #1
func(my_var); // calls #2
嘗試進行第一次調用時,我收到一個模棱兩可的函數調用錯誤。
有辦法實現嗎?
這不會因為優雅而獲得任何獎勵,但是...
// #1
template <typename R, typename T>
R func(T) { /* ... */ }
// #2
template <int = 0, typename T>
T func(T) { /* ... */ }
調用func<int>(4)
會嘗試為#2
的非類型參數提供類型參數,因此已被SFINAE拒絕。
調用帶有隱式推導的函數使用默認參數,並且仍然可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.