Какова мотивация статического полиморфизма в C ++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Какова мотивация статического полиморфизма в C ++?

Сообщение Anonymous »

Я понимаю механику статического полиморфизма с использованием любопытно повторяющегося шаблона шаблона. Я просто не понимаю, для чего это хорошо.

The declared motivation is:


We sacrifice some flexibility of dynamic polymorphism for speed.


But why bother with something so complicated Например: < /p>

template
class Base
{
public:
void interface()
{
// ...
static_cast(this)->implementation();
// ...
}
};

class Derived : Base
{
private:
void implementation();
};
< /code>

Когда вы можете просто сделать: < /p>

class Base
{
public:
void interface();
}

class Derived : public Base
{
public:
void interface();
}
< /code>

Мое лучшее предположение - то, что в коде нет семантической разницы и что это всего лишь вопрос хорошего стиля C ++. < /p>

Herb Sutter написал в исключительном стиле C ++: Глава 18 < /code>, что: < /p>


предпочитает сделать виртуальные функции частны стиль . < /p>

В контексте этого руководства первый пример - good < /strong>, потому что: < /p>

void реализация () < /code> в примере может притворяться виртуальной, поскольку она здесь для выполнения настройки класса. Следовательно, это должно быть частным. < /P>

, а второй пример - bad < /strong>, так как: < /p>

Мы не должны вмешиваться с публичным интерфейсом, чтобы выполнить настройку. < /P>

my ante: < /p>

[*]

полиморфизм? Все ли все о хорошем стиле C ++? < /Li>
Когда его следует использовать? Каковы некоторые рекомендации?


Подробнее здесь: https://stackoverflow.com/questions/190 ... phism-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»