问题描述
我将向量指针转换为指向函数的空指针。在该函数中,如何将其转换为向量指针?
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