void*转std vector<string>实现
时间: 2024-10-27 13:14:17 浏览: 18
cpp代码-模板 泛型 template<typename> template<class>
将`void*`转换为`std::vector<std::string>`通常不是直接的,因为`void*`不携带足够的信息来知道它指向的具体类型。但如果你有一个已知大小的`void*`数组,可以假设每个元素都是`std::string`类型的指针,并尝试转换。
以下是一个示例,假设你有一个`void*`数组,其中存储的是`std::string`的地址:
```cpp
#include <iostream>
#include <vector>
#include <string>
// 假设你有这个void*数组
void* raw_strings[] = { ... }; // 注意这里需要实际的字符串地址
std::vector<std::string> convertToVector(size_t size) {
std::vector<std::string> result;
result.reserve(size); // 预先分配空间以提高效率
for (size_t i = 0; i < size; ++i) {
if (raw_strings[i]) { // 检查地址是否有效
std::string* str = static_cast<std::string*>(raw_strings[i]);
result.push_back(*str);
}
}
return result;
}
int main() {
size_t array_size = sizeof(raw_strings) / sizeof(void*);
std::vector<std::string> vec = convertToVector(array_size);
for (const auto& s : vec) {
std::cout << s << '\n';
}
return 0;
}
```
这段代码的关键在于`static_cast`用来安全地从`void*`转换到`std::string*`。但是请注意,这仅适用于你知道`void*`确实指向`std::string`的情况,否则可能会导致未定义的行为。
阅读全文