Вычет шаблона в dynamic_cast - PullRequest
       1

Вычет шаблона в dynamic_cast

3 голосов
/ 27 января 2010

У меня есть класс, который определяется следующим образом:

template <class WidgetType>
class CometWidget : public WidgetType;

Внутри функции я делаю это:

dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();

и он разрешает тип CometWidget, соответствует и работает правильно.
Код выполняется внутри класса CometWidget.

Как, черт возьми, это происходит?
Почему это так? Должен ли он даже компилироваться?

Ответы [ 2 ]

2 голосов
/ 27 января 2010

Если оно находится внутри объявления CometWidget, вам не нужно явно указывать шаблон (или любой другой термин, который вы используете, чтобы сказать CometWidget<...>).

0 голосов
/ 27 января 2010

Очень интересно на самом деле. Мне кажется, это интересная ошибка компилятора.

Можно вывести правильный аргумент шаблона CometWidget <> - точно так же, как вы можете вывести параметры шаблона функции из списка аргументов. Если бы это было статическое приведение, это было бы менее удивительно.

При динамическом приведении между исходным и целевым типами мало что общего. Таким образом, такое «угадывание» могло произойти, но тогда оно не является правомерным.

Какой это компилятор?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...