我有一个 boost::array<float, 12>
我想用作签名函数的输入:
Foo(const float(&arr)[12])
我尝试通过 .data()
从 boost::array 获取数据元素但这会返回一个不适合我签名的浮点指针。我可以更改需要的函数签名,但不想这样做。想法?
最佳答案
将编译以下代码:
#include <array>
void f(int (&arr)[4])
{
}
int main()
{
std::array<int, 4> arr = {1, 2, 3, 4};
f(*reinterpret_cast<int (*)[4]>(arr.data()));
return 0;
}
诀窍是将 arr.data()
返回的 int*
转换为“指向数组的指针”(即 int (*)[ 4]
) 通过使用 reinterpret_cast
。然后您取消引用它以获得对该数组的“引用”。
编辑:最好使用像下面这样的模板,以确保将指针转换为适当的数组类型。
template<class T, std::size_t N>
T (&as_simple_array(std::array<T, N>& arr))[N] {
return *reinterpret_cast<T (*)[N]>(arr.data());
}
然后你可以像这样使用它:
f(as_simple_array(arr));
关于c++ - 为带参数的函数转换 boost::array<float, 12> (const float (&arr)[12]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749252/