0

我有一个代码,它使用以下方式查找输入的大小:

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];

如果我funcdataArr参数调用,我得到 4,而不是 8。

我该如何解决这个问题 - 我无法知道/预测从返回的参数的大小getData()

4

1 回答 1

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
于 2012-09-03T13:53:58.420 回答