3
我寫了一個簡單的程序,將陣列array[]
到名爲ARRAY_MAN功能,然後修改數組的內容:發送數組指針/參考模板
#include <vector>
#include <iostream>
template <class Var, class T, std::size_t N, class... Args>
void ARRAY_MAN(Var variable, T(&)[N], uint32_t numParams, Args... args)
{
std::vector<T> arguments{args...};
if(arguments.size() != numParams)
throw std::runtime_error("mismatch");
for(uint32_t i = 0; i < numParams; ++i)
variable[i] = arguments[i];
}
int main(int argc, char* argv[])
{
int array[] = {1,2,3}; // (*)
// print array before sending
for(uint32_t i = 0; i < 3; ++i)
std::cout << array[i] << " ";
std::cout << std::endl;
ARRAY_MAN(array, array, 3, 34, 56, 10);
// print array after sending
for(uint32_t i = 0; i < 3; ++i)
std::cout << array[i] << " ";
std::cout << std::endl;
return 0;
}
這編譯和運行。但是,如果我更換行標(*)
這一行:
int *array = new int(3);
我得到這個錯誤:
no matching function for call to ‘ARRAY_MAN(int*&, int*&, int, int, int, int)’
如何發送本次array
到ARRAY_MAN功能?
int * array = ...中的'array'是一個指針,而不是一個數組。你的函數需要一個數組。 – juanchopanza