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

param で呼び出すfuncと、8 ではなく 4 が返されます。dataArr

これを解決するにはどうすればよいですか - 返されたパラメータのサイズを知ることも予測することもできません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 に答える