簡體   English   中英

為什么我不能打電話給operator()?

[英]Why can't I call operator()?

我試圖通過示例理解C ++中的不同主題,但無法使該示例正常工作:

template<typename T>
class zero_init
{
    T val;
public:
    zero_init() : val(static_cast<T>(0)) { std::cout << "In constructor with no parameters\n"; }
    operator T() const { std::cout << "In operator T()\n";  return val; }
};

int main()
{
    const zero_init<int> x;
    x(); //Error!
    return 0;
}

我顯然正在嘗試調用operator(),但它給出了錯誤:“在沒有適當的operator()的情況下調用類類型的對象”

您不小心實現了類型轉換運算符,而不是operator() 像這樣重載operator() (我刪除了返回值,因為無論如何您都將其丟棄在main ):

#include <iostream>

template<typename T>
class zero_init
{
    T val;
public:
    zero_init() : val(static_cast<T>(0)) { std::cout << "In constructor with no parameters\n"; }
    void operator()() const { std::cout << "In operator()\n"; }
};

int main()
{
    const zero_init<int> x;
    x();
    return 0;
}

如果您確實需要返回值,請按照以下步驟操作:

#include <iostream>

template<typename T>
class zero_init
{
    T val;
public:
    zero_init() : val(static_cast<T>(0)) { std::cout << "In constructor with no parameters\n"; }
    T operator()() const { std::cout << "In operator()\n"; return val; }
};

int main()
{
    const zero_init<int> x;
    auto val = x();
    return 0;
}

暫無
暫無

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

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