微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 'void *' 到 'vector<int *>'

如何解决从 'void *' 到 'vector<int *>'

我将向量指针转换为指向函数的空指针。在该函数中,如何将其转换为向量指针?

in main

vector<int *> foo;
function(&foo);

in function
function(void *bar){
    auto temp = bar; // what replaces auto or what should bar be cast to?
    temp.pushback(something);
}

我希望我没有弄乱术语,任何意见都有帮助!

解决方法

您没有强制转换,但这只是隐式转换。该方法名为 push_back,您需要 -> 取消引用。

如果您绝对确定 void* 指向 vector<int*>,则可以安全地将其回滚:

#include <vector>

void function(void *bar){
    auto temp = static_cast<std::vector<int*>*>(bar);
    temp->push_back(new int);
}

int main() {
    std::vector<int *> foo;
    function(&foo);
}

然而,问题出现了:为什么所有的指针?如果您可以通过任何方式更改 function 并且向量应该存储整数,则您的代码应如下所示:

#include <vector>

void function(std::vector<int>& v){
    v.push_back(42);
}

int main() {
    std::vector<int> foo;
    function(foo);
}
,

您可以申请static_cast

这是一个演示程序。

#include <iostream>
#include <vector>

void function( void *bar )
{
    auto pv = static_cast<std::vector<int *> *>( bar );
    
    for ( const auto &p : *pv ) std::cout << *p << ' ';
    std::cout << '\n';
}

int main() 
{
    int a[] = { 1,2,3 };
    std::vector<int *> v;
    
    for ( auto &x : a ) v.push_back( &x );
    
    function( &v );
    
    return 0;
}

程序输出为

1 2 3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。