绑定构造函数出现错误时:C++ 中依赖类型名称之前缺少“typename”

Joh*_*der 1 c++ c++11 c++14

如何在C++中绑定构造函数?

在一个类中,我有带有构造函数的模板类,如下所示:

namespace EMRProcess
{
template<typename T>
    class CEMRImpl
    {

CEMRImpl(EMRProcessSR::CWebHandler<T>*  pHandler_, 
                            CSocketRemover* pSocketRemover, const std::string& strID, const std::string& strNo);

};
}
Run Code Online (Sandbox Code Playgroud)

从另一个类中,我尝试绑定构造函数,如下所示:

m_pMyObj->processEvent(EVT_MED, strTestId,
                                           std::bind(&EMRProcess::CEMRImpl<T>::CEMRImpl,
                                                     this,
                                                     this,
                                                     strID,
                                                     strNo));
Run Code Online (Sandbox Code Playgroud)

编译时出现错误:依赖类型名称“EMRProcess::CEMRImpl::CEMRImpl”之前缺少“typename”

有人可以帮我解决这个问题吗?

Rem*_*eau 5

您尝试对std:::bind()构造函数执行的操作永远不会按原样工作,因为获取构造函数的地址是非法的。但是 lambda 可以在任何std::bind()可以使用的地方使用(事实上,lambda 几乎总是优于std::bind()),因此让 lambda 正常调用构造函数并返回新对象,例如:

m_pMyObj->processEvent(EVT_MED, strTestId,
    [&, this](){ return EMRProcess::CEMRImpl<T>(this, this, strID, strNo); }
);
Run Code Online (Sandbox Code Playgroud)