以下作品。但是,是否可以省略SIZE模板参数(即不一定是数组的SIZE模板参数)?
template <
class T,
size_t SIZE,
std::array<T, SIZE> & ARR
>
class Foo{};
换句话说,编译器是否可以从数组模板参数中推导出SIZE?从而避免了这一行
const size_t SIZE,
答案 0 :(得分:1)
使用C ++ 17,您可以使用自动模板参数:
template<auto&>
struct Foo {};
然后,您可以发送对全局的引用:
void test() {
static auto arr = std::array{1, 2, 3, 4, 5}; // no linkage works in C++17
Foo<arr> f{};
}
答案 1 :(得分:1)
你可以通过std::tuple_size(std::array)
(自C ++ 11以来)在编译时获得大小,例如
template <
class ARRAY
>
struct Foo{
static constexpr size_t SIZE = std::tuple_size<ARRAY>::value;
using T = typename ARRAY::value_type;
};
并将其用作
Foo<array<int, 3>> f;