簡體   English   中英

在模板中使用匿名函數時遇到錯誤

[英]Encountering error when using anonymous function in template

使用模板時遇到匿名函數錯誤。 我想創建一個函數並將參數傳遞給它。 這應該很簡單,但我遇到了錯誤。 如果我不使用模板而只是替換實際類型而不是代碼有效。 我做錯了什么?

沒有用於調用“打印”的匹配函數

template <typename mytype>
void print(mytype arg1, std::function<void(mytype)> arg2)
{
   arg2(arg1);
}
.
.
auto myLamba = [](int x){std::cout << "x = " << x << std::endl;};
print (9999, myLamba);

lambda 不是std::function 它可以轉換為std::function ,但在您的模板中,您將mytype與兩個參數匹配。

這意味着參數必須能夠進行精確匹配,而模板的兩個參數都必須進行任何轉換才能成為有效匹配。

您可以明確說明類型以使其工作

print<int>(9999, myLamba);

然而,更好的選擇是不使用std::function ,只讓 callable 成為一個單獨的模板參數。 這樣,任何類型的可調用對象都可以傳入,並且作為獎勵,您可以避免將其類型擦除到std::function的開銷。

template <typename mytype, typename Func>
void print(mytype arg1, Func arg2)
{
   arg2(arg1);
}

auto myLamba = [](int x){std::cout << "x = " << x << std::endl;};
print (9999, myLamba); // Now this works

暫無
暫無

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

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