如果这是重复,我道歉。我环顾四周,发现了类似的问题但没有完全像这样。
如果我像这样实例化模板......
MyClass<int[10]> c;
如何编写模板以获取对类型和数组大小的访问权限?我已经尝试了所有我能想到的内容而无法获得它。
我受到了std :: function模板的启发,它允许你使用与函数原型类似的语法,比如......
std::function<int(MyClass&)> myfunc;
所以我认为对阵列及其大小有类似的东西会很好。我可以使用任何最新的c ++功能(c ++ 11/14)。
答案 0 :(得分:17)
答案 1 :(得分:3)
template<class Arr>
struct array_size {};
template<class T, size_t N>
struct array_size<T[N]>:std::integral_constant<std::size_t, N>{};
template<class Arr>
struct array_element {};
template<class Arr>
using array_element_t = typename array_element<Arr>::type;
template<class T, size_t N>
struct array_element<T[N]>{using type=T;};
现在您可以array_size<ArrType>{}
和array_element_t<ArrType>
而无需解压缩类型。
答案 2 :(得分:2)
template <typename T, typename = void>
struct deduce
{
};
template <typename T>
struct deduce<T,
typename ::std::enable_if<
::std::is_array<T>{}
>::type
>
{
using value_type =
typename ::std::decay<decltype(::std::declval<T>()[0])>::type;
static constexpr auto size = sizeof(T) / sizeof(value_type);
};