Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于动态\u指针\u转换的模板参数_C++_Templates_Pointers_C++11_Casting - Fatal编程技术网

C++ 用于动态\u指针\u转换的模板参数

C++ 用于动态\u指针\u转换的模板参数,c++,templates,pointers,c++11,casting,C++,Templates,Pointers,C++11,Casting,这个代码怎么了 class Event; class EventPtr : public std::shared_ptr<Event> { public: template<typename T> std::shared_ptr<T> castTo() { return std::dynamic_pointer_cast<T>(this); } }; 我得到以下编译错误:没有匹配的函数用于调用“dynam

这个代码怎么了

class Event;

class EventPtr : public std::shared_ptr<Event>
{
public:
    template<typename T>
    std::shared_ptr<T> castTo() {
        return std::dynamic_pointer_cast<T>(this);
    }
};
我得到以下编译错误:没有匹配的函数用于调用“dynamic\u pointer\u cast”

用法如下:

void SomeClass::onEvent(EventPtr event)
{
    auto e = event.castTo<SomeEvent>();
    // using casted event
}

您只是调用传递指针而不是引用的函数。尝试:

return std::dynamic_pointer_cast<T>(*this); // note the "star"

您只是调用传递指针而不是引用的函数。尝试:

return std::dynamic_pointer_cast<T>(*this); // note the "star"
首先,dynamic_pointer_cast接受引用而不是指针,但是你确定你是使用c++11支持编译的吗?还有,你包括了吗?是的,它是c++11,包括在内。首先,dynamic_pointer_cast接受引用而不是指针,但是你确定你是使用c++11支持编译的吗?还有,你包括了吗?是的,它是c++11,包括在内