[英]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;
當T
為int
。 return int;
有效?
您可以將函數模板調用為: dummy.myproc<int>();
。 您必須通過編寫<int>
來告知T
是什么。 但是,如果函數采用了T
參數,則編譯器將能夠通過查看參數的類型來推斷T
是什么。 例如dummy.myproc(2.3)
將解析為T
是double
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.