gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:50:44 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com