将shared_ptr(即来自_this()的shared_)作为空值传递* 在C++类中,我尝试使用 SydDypTr>代码>,但不是使用这个< /C> >我试图使用 SydRyFROXX()(< /代码>)。在构造函数中,我试图创建一个结构的对象,该结构需要一个void*。我不确定如何将shared\u ptr转换为void*,可以将其作为参数传递给需要void*的结构

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

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

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
转换为
无效*
,请不要这样做。如果不首先放弃使用共享指针,这是不可能的<代码>无效指针太简单。他们甚至不知道他们指向的是什么,更不用说他们指向的有特殊的破坏规则了。