将shared_ptr(即来自_this()的shared_)作为空值传递* 在C++类中,我尝试使用 SydDypTr>代码>,但不是使用这个< /C> >我试图使用 SydRyFROXX()(< /代码>)。在构造函数中,我试图创建一个结构的对象,该结构需要一个void*。我不确定如何将shared\u ptr转换为void*,可以将其作为参数传递给需要void*的结构
Callback.cpp将shared_ptr(即来自_this()的shared_)作为空值传递* 在C++类中,我尝试使用 SydDypTr>代码>,但不是使用这个< /C> >我试图使用 SydRyFROXX()(< /代码>)。在构造函数中,我试图创建一个结构的对象,该结构需要一个void*。我不确定如何将shared\u ptr转换为void*,可以将其作为参数传递给需要void*的结构,c++,c++17,C++,C++17,Callback.cpp struct CObj{ int val; void* context; }; class A : std::enable_shared_from_this<A>{ private: Cobj mCobj; public: A(){ mCobj = (CObj){5, shared_from_this()}; } ~A(){ } Cobj getObjref(){ return mCObj;
struct CObj{
int val;
void* context;
};
class A : std::enable_shared_from_this<A>{
private:
Cobj mCobj;
public:
A(){
mCobj = (CObj){5, shared_from_this()};
}
~A(){
}
Cobj getObjref(){
return mCObj;
}
};
std::shared_ptr p = std::shared_ptr<A>(new A);
Cobj invokeCfunc = p->getObjref();
structcobj{
int-val;
无效*上下文;
};
A类:std::从\u中启用\u共享\u{
私人:
Cobj-mCobj;
公众:
(){
mCobj=(CObj){5,从_this()共享_;
}
~A(){
}
Cobj getObjref(){
返回mCObj;
}
};
std::shared_ptr p=std::shared_ptr(新A);
Cobj invokeCfunc=p->getObjref();
您不能在构造函数中从此调用共享。您也不需要这样做,因为您想要的是void*
<代码>此
隐式转换为void*
。首先,您不需要访问共享指针
这很简单:
A(): mCobj{5, this} {
请注意,如果您复制了a
,则该副本将指向它所复制的对象。考虑这是否是您想要的,如果不是,那么更改复制并移动构造函数和赋值运算符,按照您希望它们的行为运行。
我不确定如何将共享\u ptr
转换为无效*
您可以使用成员函数
get
。生成的指针隐式转换为void*
您不能在构造函数中从此调用shared\u。您也不需要这样做,因为您想要的是void*
<代码>此
隐式转换为void*
。首先,您不需要访问共享指针
这很简单:
A(): mCobj{5, this} {
请注意,如果您复制了a
,则该副本将指向它所复制的对象。考虑这是否是您想要的,如果不是,那么更改复制并移动构造函数和赋值运算符,按照您希望它们的行为运行。
我不确定如何将共享\u ptr
转换为无效*
您可以使用成员函数
get
。结果指针隐式转换为void*
,注意标记。你不会同时在所有的版本标签中工作,这肯定不是C。我删除了C和所有的标准版本,除了最近的版本。如果您更喜欢C++11或14,请随意替换17。至于将共享的\u ptr
转换为无效*
,请不要这样做。如果不首先放弃使用共享指针,这是不可能的<代码>无效指针太简单。他们甚至不知道他们指向的是什么,更不用说他们指向的东西有特殊的销毁规则。另请参见。小心标记。你不会同时在所有的版本标签中工作,这肯定不是C。我删除了C和所有的标准版本,除了最近的版本。如果您更喜欢C++11或14,请随意替换17。至于将共享的\u ptr
转换为无效*
,请不要这样做。如果不首先放弃使用共享指针,这是不可能的<代码>无效指针太简单。他们甚至不知道他们指向的是什么,更不用说他们指向的有特殊的破坏规则了。