Идеальная пересылка - через виртуальные функции - PullRequest
6 голосов
/ 03 января 2011

Как я могу включить идеальную пересылку через виртуальную функцию?У меня действительно нет желания писать каждую перегрузку, как в C ++ 03.

1 Ответ

4 голосов
/ 03 января 2011

Вы не можете. Идеальная пересылка работает только путем объединения шаблонов и rvalue-ссылок, потому что это зависит от того, какой тип реального типа T&& оценивается, когда T специализирован. Вы не можете смешивать шаблоны и виртуальные функции.

Однако вы можете решить проблему с помощью какого-либо механизма стирания типов:

struct base {
  virtual void invoke() = 0;
};

template <class T>
struct derived : public base {
  derived( T&& yourval ) : m_value(std::forward(yourval)) {}
  virtual void invoke() { /* operate on m_value.. */ }

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