2015-07-22 2 views
1

Что не так с этим кодом?параметр шаблона dynamic_pointer_cast

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 
} 
+0

С одной стороны, 'dynamic_pointer_cast' принимает ссылку не указатель, но вы уверены, что компилируете с поддержкой C++ 11? – user657267

+0

Также вы включили ''? – anderas

+0

Да, это C++ 11, и включен – Peregrin

ответ

4

Вы просто вызов функции передается указатель вместо ссылки. Попытайтесь:

return std::dynamic_pointer_cast<T>(*this); // note the "star" 
Смежные вопросы