我有一个boost::array<float, 12>
我想用作签名为的函数的输入:
Foo(const float(&arr)[12])
我尝试通过以下方式从 boost::array 获取数据元素.data()
但这返回一个浮点指针,不适合我的签名。我可以根据需要更改函数签名,但我不想这样做。有想法吗?
以下代码将编译:
#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;
}
诀窍是投射int*
由返回arr.data()
到“指向数组的指针”(即int (*)[4]
) 通过使用reinterpret_cast
。然后,您取消引用它以获取对该数组的“引用”。
Edit:最好使用如下所示的模板,以确保将指针强制转换为适当的数组类型。
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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)