簡體   English   中英

僅類型演繹模板

[英]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.

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