我正在嘗試使用在編譯期間未定義的型別宣告一個類的成員變數。我閱讀了這篇文章,其中 C 17 通過修改模板建構式呼叫的型別引數來修復模板建構式。(我可能讀錯了,因為我遇到了錯誤。)
class theClass {
template <typename UDEF> theClass(UDEF var) : memberVar(var) {}
auto memberVar{ NULL };
};
int main() {
int number = 3;
theClass the(number); // Something something C 17
}
有沒有人有任何解決方法?也許是new運營商?這讓我很困惑。我收到了超級通用的錯誤:
Error (active) E0330 "theClass::theClass(UDEF var) [with UDEF=int]" (declared at line 4) is inaccessible ConsoleApplication1```
Error (active) E1598 'auto' is not allowed here ConsoleApplication1
編輯:我嘗試將模板放在初始化串列中:
template <typename UDEF> theClass(UDEF var) : UDEF memberVar(var) {}
并且沒有收到任何 IntelliSense 錯誤,但恐怕它不會編譯。畢竟這是一個初始化串列,而不是宣告串列,對吧?并且奇怪的建構式模板呼叫 thingy 仍然給出錯誤。
uj5u.com熱心網友回復:
模板應該在類上,讓成員使用模板引數:
template <typename UDEF>
class theClass {
UDEF memberVar {};
public:
theClass(UDEF var) : memberVar(var) {}
};
現在你的 main 可以創建一個像這樣的物件:
int main() {
int number = 3;
theClass the(number); // CTAD, C 17
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409049.html
標籤:
