簡體   English   中英

C ++在可變參數模板中獲取許多元素

[英]C++ Getting a number of elements in variadic template

所以我試圖在我的可變參數模板中獲取一些元素,如下所示:

Test(const T& t...);

template<typename T>
inline Class<T>::Test(const T& t...){
     int num = sizeof...(t);
     ...
}

但是它沒有編譯,我收到以下錯誤:

錯誤 C3523:“sizeof ...”需要一個未擴展的參數包作為其參數

't' 不是 'sizeof...' 的有效操作數。 你的意思是使用'sizeof'嗎?

獲取t...中的參數數量的正確方法是什么?

嘗試std::tuple元編程: std::tuple_size<std::tuple<Types...>>::value產生類型參數的數量。 例如,此代碼打印4

#include <iostream>
#include <tuple>
#include <cstddef>

template<typename ...Types>
constexpr std::size_t Test(Types&& ... args){
    constexpr std::size_t sz = std::tuple_size<std::tuple<Types...>>::value;
    return sz;
}

int main()
{
    std::size_t val = Test(0, 0L, 'a', std::cin);
    std::cout << val;
}

如果T是參數包,您可以使用以下語法聲明一個函數,該函數接受一系列參數,其類型對應於參數包中的參數:

inline Class<T>::Test(const T&... t) { /* ... */ }

但是,似乎T不是參數包。 它只是一個單一的類型參數。 另外,您將...放在錯誤的位置。 所以你真正做的是聲明一個函數,它接受一個T類型的參數,加上一個 C 風格的省略號。 (是的,省略號前的逗號是可選的!)

因此,當您編寫sizeof...(t)時,編譯器會抱怨,因為t不是包。 這只是一個正常的參數。

也許您想將Test聲明為一個接受任意數量參數的函數,但都是const T&類型? 不幸的是,在當前的 C++ 中沒有簡單的方法可以做到這一點。 請參閱為使用數組、向量、結構等傳遞給可變參數函數或可變參數模板函數的所有參數指定一種類型? 為解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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