将 boost::array 转换为带参数的函数 (const float (&arr)[12])

2024-02-10

我有一个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(使用前将#替换为@)

将 boost::array 转换为带参数的函数 (const float (&arr)[12]) 的相关文章

随机推荐