我有一个代码,使用以下方式查找输入的大小:
template <typename T>
void func (T& input) {
const void *valuePtr;
size_t valueSize;
tie(valuePtr, valueSize)
= detail::ParamInfo<typename remove_const<T>::type>::get(input);
//code
}
如果输入是一个数组,我需要得到它的实际大小而不是指针大小。 因此,如果我有
size_t data[3];
我用数据参数调用func
,我确实得到valueSize = 12
但如果我不知道数组的大小,我会遇到问题,例如:
如果我有
vector<size_t> data;
data = getData(); //as a result data is a vector of 2 elements
size_t *dataArr = &data[0];
如果我使用func
param调用dataArr
,我会得到4而不是8。
我该如何解决这个问题 - 我无法知道/预测getData()
答案 0 :(得分:0)
在编译时无法获得动态数组的大小。你需要在运行时传递矢量大小作为函数参数,为它做过载:
template <typename T> void func(T& input, size_t i_size);
或者更好地为std::vector
:
template <typename T> void func(std::vector<T>& input);
// Use input.size() to get array size