我需要在具有签名的外部库中调用函数:
void fn(double (*values)[4]);
但我希望传递像std::vector<std::array<double, 4>>
这样的对象,它必须符合c ++ 11标准。我该怎么称呼这个功能?
答案 0 :(得分:1)
我该如何调用此功能?
调用该函数最干净的方法是:
double array[4];
// Fill up the array with data
for (size_t i = 0; i < 4; ++i )
{
array[i] = ...;
}
fn(&array);
为了能够在std::vector<std::array<double, 4>>
时调用该函数,您可以创建几个包装函数。
void fn_wrapper(std::array<double, 4>>& in)
{
double array[4];
// Fill up the array with data
for (size_t i = 0; i < 4; ++i )
{
array[i] = in[i];
}
fn(&array);
// If you fn modified array, and you want to move those modifications
// back to the std::array ...
for (size_t i = 0; i < 4; ++i )
{
in[i] = array[i];
}
}
void fn_wrapper(std::vector<std::array<double, 4>>& in)
{
for ( auto& item : in )
{
fn_wrapper(item);
}
}
答案 1 :(得分:1)
有了这个:
std::vector<std::array<double, 4>> my_array;
...
// Function call:
fn((double(*)[4]) &my_array[array_index][0]);