[英]cpp: define class member variable type by type passed to constructor
我想使用傳遞給 C++ 中的構造函數的參數類型來定義成員變量的類型。 這可能嗎?
我在 C++14 中嘗試過,但出現編譯錯誤: error: missing template arguments before 'a'
我想到了這樣的事情:
template <typename SOMETYPE>
class A {
public:
SOMETYPE membervariable;
A(int foo, SOMETYPE bar){};
};
int main()
{
A<char> a = A(123, 'z');
}
但不是使用A<char> a = A(123, 'z')
我想像這樣創建它A a = A(123, 'z')
- 所以本質上我想刪除模板參數和讓編譯器從第二個參數推斷類型。
在 C++14 及之前,您將有一個相應的make_T
工廠 function:
template<class SOMETYPE>
A<SOMETYPE> make_A(int foo, SOMETYPE bar)
{
return A<SOMETYPE>(foo, std::move(bar));
}
// Sometimes spelt `A::make` or `A::create`,
// but the standard library uses `make_pair`, `make_tuple`, etc.
int main()
{
auto a = make_A(123, 'z');
}
在 C++17 中,引入了class 模板參數推導(CTAD) 。 這使您可以在不指定模板 arguments 的情況下使用模板類的名稱,它們將被推導出為 function 模板 arguments。
因此,在 C++17/20 中,您可以執行以下任何操作:
A a{123, 'z'};
A a = A(123, 'z');
auto a = A(123, 'z');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.