c++ - 当需要特定类型的 vector 时,通过引用传递空指针 vector

标签 c++ c++11 vector void-pointers

考虑以下场景:

class A
{
    public:
        int a;
        A(int _a) : a(_a) {}
};

void Get(std::vector<A*>& vec)
{
    A* a1 = new A(5);
    A* a2 = new A(50);
    A* a3 = new A(500);
    vec.push_back(a1);
    vec.push_back(a2);
    vec.push_back(a3);
}

int main()
{
    // Scenario 1
    auto vec = std::vector<A*>();
    Get(vec);
    for(auto* v : vec)
        std::cout << v->a << std::endl;

    // Scenario 2: 
    auto vecvoid = std::vector<void*>();
    vecvoid.assign(vec.begin(), vec.end());
    for(auto* v : vecvoid)
        std::cout << static_cast<A*>(v)->a << std::endl;
    return 0;
}

场景 2 中,是否可以将 vecvoid 直接传递给 Get()(无需重载/修改 Get() ) 而不是使用如上所示的两步方法(函数调用后调用 vector::assign())?

最佳答案

幸运的是,这是不可能的。
std::vector<A*>std::vector<void*>是不相关的类型。

考虑一下如果可能会发生什么:

void G(std::vector<A*>& vec)
{
    *vec[0] = A(7);
}

// ...
int x = 0;
std::vector<void*> v = { &x };
G(v); // Oops.

关于c++ - 当需要特定类型的 vector 时,通过引用传递空指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48093320/

相关文章:

c++ - C++ 中的覆盖函数不起作用

c++11 - 是否有对应于 std::is_pod<>​​ 的类型谓词的合取?

c++ - 使用文件流删除一行文本 (C++)

python - 矢量化照片 : Finding an Adapted Algorithm

mysql - 如何将向量插入到 mysql 表的列中?

c++ - 将大小为编译时常量的数组初始化为单个值

c++ - 如何在 C++ 的一个项目中访问所有具有相同类型/类的对象?

c++ - C++中虚函数和继承的实现

c++ - C++ 中的继承构造函数

c++ - if 语句中的 vector<int>::iterator 编译失败