簡體   English   中英

cpp:通過傳遞給構造函數的類型定義 class 成員變量類型

[英]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.

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