[英]How to use fold expression to instantiate each type in a variadic template function?
我正在嘗試創建一個“對象管理器”,它將創建和存儲模板類的實例。 該類采用一個模板參數並從基類繼承,以允許將具有不同模板參數的實例存儲在同一容器中。 將用作模板參數的類型將由用戶在可變參數模板函數中提供。
以下是說明問題的最小示例:
struct A
{
int m_a = 0;
};
template<typename T>
struct B : public A
{
int m_b = 1;
T m_t;
};
template<typename... Types> std::vector<A*> generate_a_vec()
{
std::vector<A*> a_vec; // <--- Need to initialize with a new B<T> for each T in "Types"
return a_vec;
}
int main()
{
std::vector<A*> a_vec = generate_a_vec<int, float, bool>();
for(A* a : a_vec)
{
std::cout << a->m_a << std::endl;
}
return 0;
}
假設我們將使用的每個T
都有一個默認構造函數。 有沒有辦法使用折疊表達式為Types
每種類型創建一個帶有new
的B<T>
並將結果指針添加到generate_a_vec()
的向量?
如果我正確理解你想要什么,你正在尋找
std::vector<A*> a_vec { new B<Types>{}... };
但這不是“折疊表達”; 它是一個簡單的可變參數模板包擴展,從 C++11 開始可用。
“折疊表達式”(可從 C++17 獲得)的示例如下
std::vector<A*> a_vec;
( a_vec.push_back( new B<Types>{} ), ... );
其中可變參數模板包使用逗號運算符折疊擴展
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.