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

标签 c++ arrays boost casting

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

相关文章:

c++ - 没有类类型 C++

c++ - 模板化需求表达式

c++ - MPL 映射实例化类型

c++ - 使用 boost 的文件行数

python - 两个并发的 Python 进程可以在 Boost Python 中运行吗?

c++ - 无法编译模板类

c++ - Qt SQL 准备失败

c++ - int arr[ ] 是有效的 C++ 吗?

PHP 将编号数组更改为带键的数组

c++ - 访问冲突(段错误)