簡體   English   中英

C ++中的結構中的模板問題

[英]Issue with template in structs struct in c++

我在C ++中有一個結構,如下所示:

struct mystruct {
  template <typename T>
  T myproc() {
    std::cout << "RETURNING T";
    return T();
  }
};

現在,該結構已經存在(這只是精確結構的示例副本),我需要使用它。 我想做的是調用方法myproc()如下所示:

    int _tmain(int argc, _TCHAR* argv[])
    {
      mystruct dummystruct;
      int y = dummystruct.myproc();
      return 0;
    }

但這給了我這個編譯錯誤:

    error C2783: 'T mystruct::myproc(void)' : could not deduce template argument for 'T'
    see declaration of 'mystruct::myproc'

我知道這是因為編譯器無法知道T是什么。

所以我的問題是,結構體中的函數聲明是否正確? 我不這么認為,但是該代碼已經存在於我們的舊代碼之一中,所以我認為我應該對此發表意見。

所以我知道它是錯誤的,但是如果有人認為它是正確的,那么請向我解釋如何使用它。

T表示類型,例如int 寫作return T; 將與return int;相同return int; Tint return int; 有效?

您可以將函數模板調用為: dummy.myproc<int>(); 您必須通過編寫<int>來告知T是什么。 但是,如果函數采用了T參數,則編譯器將能夠通過查看參數的類型來推斷T是什么。 例如dummy.myproc(2.3)將解析為Tdouble dummy.myproc(2.3)因為2.3是雙dummy.myproc(2.3)

我實際上對編譯后的內容感到驚訝(如果最初這樣做的話?)。

可以將模板視為一種類型。 您不會返回類型嗎?

您的代碼可以如下所示。

struct mystruct {
  int myproc() {
    std::cout << "RETURNING INT";
    return int;
  }
};

這不是很有效。

如果要返回默認的構造值,則需要加上括號。

struct mystruct {
  template <typename T>
  T myproc() {
    std::cout << "RETURNING T";
    return T();
  }
};

但是,由於在s.myproc()的上下文中不可推導template參數, s.myproc()您將不得不執行s.myproc<mytype>()

暫無
暫無

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

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