如何最好地将指向“U向量”对象的指针分配给“a”;无效*”;c+中的变量+;? 我有一个场景,我有两个“C++”代码的“世界”,它们是由于设计原因而只调用C的屏障。(更详细地说,我有一个主线程和多个子线程,每个孩子都可以为我调用一组函数,并传递一组参数,并返回函数结果。互连是纯C,但体系结构是共享内存,而传递的数据是用于调用C++向量对象的一些)。

如何最好地将指向“U向量”对象的指针分配给“a”;无效*”;c+中的变量+;? 我有一个场景,我有两个“C++”代码的“世界”,它们是由于设计原因而只调用C的屏障。(更详细地说,我有一个主线程和多个子线程,每个孩子都可以为我调用一组函数,并传递一组参数,并返回函数结果。互连是纯C,但体系结构是共享内存,而传递的数据是用于调用C++向量对象的一些)。,c++,pointers,visual-studio-2012,vector,C++,Pointers,Visual Studio 2012,Vector,对于我来说,在向量上以简单的方式执行此操作失败-此语句仅获取对象数据上的指针,而不获取对象指针本身: vector<something> my_object; void * argv0 = &my_object; 向量my_对象; void*argv0=&my_对象; 如果我学会了正确的方法,那么该类的设计目的是为我提供指向其数据数组的指针,而不是对象上的指针(该对象还具有用于管理的特殊成员,如大小或分配的空间)。由于目标层无法管理和更新特殊成员,因此无法对该区域进行任何

对于我来说,在向量上以简单的方式执行此操作失败-此语句仅获取对象数据上的指针,而不获取对象指针本身:

vector<something> my_object;
void * argv0 = &my_object;
向量my_对象;
void*argv0=&my_对象;
如果我学会了正确的方法,那么该类的设计目的是为我提供指向其数据数组的指针,而不是对象上的指针(该对象还具有用于管理的特殊成员,如大小或分配的空间)。由于目标层无法管理和更新特殊成员,因此无法对该区域进行任何更改。换句话说,“运算符=”有一个类定义的“(空虚*)=(vector)”配对,我不知道如何用直接的C++方式来克服。 我的下一个最佳猜测是C时尚方法:

typedef union
{
    void *              pvObject;
    vector<something> * pcObject;
} VECTOR_VOID_UNION_T;

vector<something> my_object;
VECTOR_VOID_UNION_T uVV;
uVV.pcObject = &my_object;
void * argv0 = uVV.pvObject;
typedef联合
{
void*pvObject;
向量*pcObject;
}向量_VOID_UNION_T;
向量my_对象;
向量(VOID)(UNION)(uVV);;
uVV.pcObject=&my_object;
void*argv0=uVV.pvObject;
我真的不确定在这样的类设计中,这是最好的还是唯一的方法。可能还有其他的操作符,如C++扩展的铸造操作符,可以更温和地解决对对象指针本身的访问问题。但到目前为止,我尝试的任何尝试都没有给我带来成功

我现在的问题是:
如何正确地、更优雅地克服C++定义的类定义=操作符(或它的等价物),以便最终指向向量对象的指针[编辑:不是矢量数据]被存储在“空洞*”类型的变量中?

< p>如果你试图获得一个<代码>空洞*>代码>,指向向量的数据:

assert(!theVector.empty());
void* thePtr = static_cast<void*>(theVector.data());
assert(!theVector.empty());
void*thePtr=static_cast(theVector.data());

不过,很难说出你在问什么。

你可能正在寻找这个:

void *argv0 = reinterpret_cast<void *>(&my_object);
void*argv0=重新解释强制转换(&my_对象);

你要找的是我的对象.data()吗?不是。这是向量对象。我不想要指向数据数组的指针,我想要指向向量对象本身的指针。@alex:为什么?您将无法从C端使用它。。但是如果是这样的话,就因为重载的=运算符而导致
(void*)&myVector
@亚历克斯:我不知道你在说什么。C没有重载运算符。您能否尝试更清楚地说明您的目标?反之亦然,将“void*”指定给向量对象上的指针可能存在=运算符重载问题。(可能是因为这样的分配在运行中创建了一个重复的对象!)我同时处理了这两个位置,所以我不确定。在我的代码中对其进行测试后,看起来这正好切中要害。这适用于正向和反向转换操作。下面是接收线程(从我的实现中派生出来的)向后转换的抽象代码,仅供大家参考:'vector*pMyObject=reinterpret_cast(argv0);'我认为(=可能)我的主要问题是,在解码过程中,我得到了一个“void*”分配给一个对象指针,但由于=运算符重载&因此在这一行中触发了一些新的、因此独立的向量对象,在运行中被无声地创建。