簡體   English   中英

從 'void *' 到 'vector 的轉換<int *> '</int>

[英]Conversion from 'void *' to 'vector<int *>'

我將向量指針轉換為指向 function 的 void 指針。 在那個 function 中,我如何將它轉換為向量指針?

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;
}

程序 output 是

1 2 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM