簡體   English   中英

為什么在該示例中沒有 function 模板匹配具有不同返回類型的 function 模板專業化?

[英]Why no function template matches function template specialization with different return type in that example?

為什么在嘗試為顯式模板特化設置不同的返回值而不是 auto 時會發生編譯錯誤? 為什么這里編譯報錯:

template <size_t T>
auto Get() = delete;

template <>
auto Get<0>(){
    return 5;
}

std::string str = "Hello world!";

template <>
std::string const & Get<1>() {
    return str;
}

int main() {
    func_employee();

    return 0;
}

在您的示例中, auto Get()是與模板參數無關的函數簽名。 如果您希望能夠顯式特化返回類型,則必須為其添加相應的參數:

template <size_t S, typename R>
R Get() = delete;

在這種情況下,模板特化可以保持不變,但auto返回類型不再有意義,因為我看不到它如何用於實例化模板,因此您可能希望將其替換為所需的整數類型:

template <>
int Get<0>(){
    return 5;
}

最后,function 模板不會根據返回類型推導其 arguments,因此在這種情況下您必須明確指定它:

auto integral = Get<0, int>();
auto string = Get<1, std::string const &>();

暫無
暫無

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

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