我可以传递 &std::array<> 作为 void* 吗?
Can I pass &std::array<> as a void*?
我有一些遗留的C代码,我用一个C++接口包装了这些代码,供新的C++代码使用。 C 代码使用 void* 从文件加载数据。 它知道根据您发送的枚举标签在内部加载多少数据:
bool load_data( TAG_TYPE tag, void* data );
我的C++包装器看起来像这样:
template<typename T>
T load( TAG_TYPE tag ) {
T data;
bool success = load_data( tag, &data );
assert( success );
return data;
}
这增加了一些类型安全性,并且对于C++代码来说更简洁。 我们可以使用 auto & const:
const auto foo = load<int>( TAG_NUM_POINTS );
现在有人需要从文件中加载一个数组。 他们想使用 std::array,因为这C++。
const auto foo = load<std::array<int, 3>>( TAG_RGB_VALUE );
这安全吗? 它似乎编译和运行良好。 在封面下,它将传递&std::array<int, 3>
作为data
值,而不是首选data.data()
。
这似乎是我想进行模板专用化的领域,但是我需要为 std::array 的类型和大小添加模板参数? 这可能吗,这是要走的路吗?
std::array<>
中存在一个名为data()
的方法。它允许您访问内部数据,而不必担心实施。您可以在此处阅读更多相关信息 https://en.cppreference.com/w/cpp/container/array/data
一个例子
bool load_data( TAG_TYPE tag, void* data );
template<typename T>
std::array<T> load( TAG_TYPE tag ) {
std::array<T> data;
bool success = load_data( tag, data.data() );
assert( success );
return data;
}
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 调用向量的函数,给定向量的指针作为 void *
- 我可以传递 &std::array<> 作为 void* 吗?
- 如何在C++中使用 void* 在指针作为对方法的引用传递时保存uint32_t的值
- 如何将变量的值安全地传递给C++方法,该方法只将void*作为参数
- void*作为通用引用类型是如何工作的
- 符号作为变量的值为 void:company-c-headers
- C++ void 作为参数,如 PHP
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 传递返回 void * 作为参数的函数
- 将"void"作为函数参数传递
- 在 STL 中使用 void* 作为固定宽度记录
- 使用*void作为static_cast的缓冲区
- C++ "const void" 作为返回值比 "void" 更正确?
- const void* 作为 C++ 中 MKL Blas 例程的复数
- 为什么void*作为模板参数可以作为函数参数,但不能作为模板参数
- "void();"作为单独的语句在C++中是什么意思?
- 使用void*作为Java Object的c++等效
- 将Void作为指针传入类,然后执行其内容