我有一個型別,我們稱它為 T。它可以是不同的型別,而我事先并不知道它們:int、double、位圖指標……現在,我有一個類,我們稱它為 C。它應該保持T 的佇列向量。每個佇列都有其唯一型別的元素,但 C 可能有一個向量(或任何其他維護多個佇列的方式),其中包含幾個不同型別的佇列:
排隊,排隊,...
所以我的問題是:有沒有辦法將可變數字型別傳遞給一個類?示例:我需要獲取 <int, double, double, int> 并在建構式中創建相應的佇列,另外我需要一個函式來獲取/將資料放入特定佇列(例如,串列中的第 3 號佇列) .
我知道可變引數模板,但不知道如何使用它:看起來我必須遞回地做,而且我不是那么先進......
我可以使用“any”來做到這一點,但是 get/put 也會有“any”,而且我不知道如何進行型別檢查,所以用戶不會發送雙精度而不是字串,或者類似的東西那。
有任何想法嗎?謝謝。
uj5u.com熱心網友回復:
其實沒那么復雜。你甚至不需要遞回。只是std::tuple
#include <tuple>
#include <queue>
template <class... Args>
struct C
{
std::tuple<std::queue<Args>...> queues_;
template <std::size_t I>
auto& queue_at()
{
return std::get<I>(queues_);
}
};
auto test()
{
C<int, double, bool> c;
std::queue<int>& q1 = c.queue_at<0>();
std::queue<double>& q2 = c.queue_at<1>();
}
uj5u.com熱心網友回復:
您可以將可變引數模板與遞回繼承一起使用:
#include <queue>
#include <string>
template <typename First, typename... Rest>
struct Base : Base<First>, Base<Rest...> {
};
template <typename First>
struct Base<First> {
std::queue<First> q;
};
int main (){
auto f = Base<int, std::string>{};
static_cast<Base<int>>(f).q.emplace(32);
static_cast<Base<std::string>>(f).q.emplace("sdf");
// not allowed
// static_cast<Base<float>>(f).q.emplace(1231.2);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/515163.html
標籤:C 模板
上一篇:當兩種型別都是8位元組長時,`std::is_same_v<size_t,uint64_t>`評估為`false`
