類似于問題Declare member variables from variadic template parameter,但有一個額外的問題:
假設我有 2 個(或多個)結構:
struct A { int a; };
struct B { int b; };
我想創建一個包含每個動態陣列的類,并且能夠呼叫對其中一種型別進行特定處理:
struct Manager<A, B>
{
std::vector<A> as;
std::vector<B> bs;
template<typename T> process();
};
在哪里,如果我呼叫process<A>它將遍歷所有“as”,并process<B>遍歷所有“bs”。
此外,我提供 A、B 或任意數量的結構(彼此不同)作為可變引數模板引數。換句話說,做Manager<A, B>是預期用途,但Manager<A, A, B>不允許做(因為有 2 個“A”)。
這是可能的(并且,如果可能,以一種不會創建大量樣板代碼或不可讀的方式)?
uj5u.com熱心網友回復:
據我了解,std::tuple也可以完成這項作業:
template <typename... Ts>
struct Manager
{
std::tuple<std::vector<Ts>...> vectors;
template <typename T, typename F>
void process(F f) {
for (auto& e : std::get<std::vector<T>>(vectors)) {
f(e);
}
}
};
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/312589.html
