模板参数到dynamic_pointer_cast

时间:2015-07-22 10:02:26

标签: 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);
    }
};

我收到以下编译错误:没有用于调用'dynamic_pointer_cast'的匹配函数

以下是用法:

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

1 个答案:

答案 0 :(得分:4)

您只是调用函数传递指针代替引用。尝试:

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