[英]Fixed Length Variadic Parameter Packs in C++11
我正在嘗試使用C ++ 11實現一個通用的n維向量類。 理想情況下,我想提供類型“T”和向量的維數“n”,並讓構造函數接受適當數量的參數。
不幸的是,我一直無法找到一種方法來允許模板指定的參數包的固定長度。
我正在尋找的是類似的東西
template<typename T, size_t n>
class Vector {
public:
Vector(T... values /* values is exactly n parameters long */);
...
};
是否有可能做到這一點?
好吧,你可以使用std :: enable_if:
template <typename... Args,
typename = typename std::enable_if<
sizeof...(Args) == n
>::type>
explicit Vector(Args&&... values) : _data{ std::forward<Args>(values)... } {}
它將影響可能接受除n之外的Args大小的構造函數。
你也可以使用這個技巧:
template <typename T, std::size_t n, typename = std::make_index_sequence<n>>
class Vector;
template <typename T, std::size_t n, std::size_t... Ignore>
class Vector<T, n, std::index_sequence<Ignore...>>
{
template <size_t > using ith_T = T;
public:
Vector(ith_T<Ignore>... values)
{
}
};
這將確保Vector
采用類型為T
n
參數,不需要額外的模板。 您還可以在命名空間中隱藏Ignore...
ugliness:
namespace details {
template <typename T, std::size_t n, typename = std::make_index_sequence<n>>
class Vector;
...
}
template <typename T, std::size_t n>
using Vector = details::Vector<T, n>;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.