【发布时间】:2019-12-27 12:18:32
【问题描述】:
由this question 触发,我想出了以下代码(在我的答案中是boost::array,但同样适用于std::array):
template <std::array<char,1>::size_type size>
void DataTransform(std::array<char, size> data) {
}
我对@987654325@ 一点也不满意。我必须以一定的大小实例化,才能知道size_type。对于std::array,我可以使用size_t,但是一般情况呢?如果size_type 不是size_t 怎么办?或者更一般(即不适用于std::array)如果size_type 对不同的大小不同(愚蠢但可能)怎么办?
我知道这个问题相当学术,有很多方法可以完全避免这个“问题”(例如,我可以通过迭代器)。无论如何,我想知道...
对于需要实例化 size(size_type 类型)的模板,确定 size_type 的简洁方法是什么?
更一般地,问题可以表述为:在实际实例化模板之前,如何获得可能依赖于模板参数的模板 typedef。
【问题讨论】:
-
std::array<T,N>::size_type不表示N的类型,始终是std::size_t -
@Caleth 是的,我知道,但我需要选择一些
N才能获得std::array<T,N>::size_type,这就是我想要避免的。一般来说some_template<N>::some_typedef可能取决于N的值(如果std::array::size_type是这种情况,那真的很愚蠢,但通常你永远不知道......) -
即使在一般情况下,
N的 type 也不依赖于some_template<N>的 instantiation 的任何部分,因为它是some_template声明的一部分 -
@Caleth 也许这个问题是基于一种误解,即
std::array::size_type的目的是获得std::array的size_type,而实际上这根本不需要。也许array::size_type更适合在您有一个未知类型的实例化容器时使用... -
@Caleth 啊,好的,现在我明白你想说的话了。呃,似乎我真的想多了这个问题。然而,答案显示了在更一般的场景中可能有用的方法
标签: c++ arrays templates size-type