簡體   English   中英

為什么std :: function在這種情況下不起作用?

[英]Why doesn't std::function work in this situation?

想象一下我有一個類型:

struct my_type
{
    double operator()(int a)
    {
        return 3.1415;
    }
};

然后我想把它包裝在std::function 考慮兩種不同的方法:

my_type m_t;
std::function<double(int)> f(std::move(m_t));
std::cout << f(4) << std::endl;

如我所料,一切都很好,打印出PI的第一個數字。 然后是第二種方法:

std::function<double(int)> ff(my_type()); 
std::cout << ff(4) << std::endl;

在我看來,這個代碼是完全一樣的第一個。 rvalue作為function包裝器的參數傳遞。 但問題是,第二個代碼不能編譯! 我真的不知道為什么會這樣。

這是着名的最令人煩惱的解析問題。 對於std::function<double(int)> ff(my_type()); ,你沒有像你期望的那樣聲明一個std::function<double(int)>類型的對象,而是一個名為ff的函數,它返回一個類型為std::function<double(int)>的對象,並且只有一個(未命名)參數,它是函數返回類型my_type並且不進行任何輸入的指針。

要解決此問題,您可以添加其他括號或使用C ++ 11支持的大括號(大括號可用於消除歧義,因為它不能用於參數列表)。 例如

std::function<double(int)> ff1((my_type())); 
std::function<double(int)> ff2(my_type{}); 
std::function<double(int)> ff3{my_type()}; 
std::function<double(int)> ff4{my_type{}}; 

生活

暫無
暫無

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

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