Я понимаю механику статического полиморфизма с использованием любопытно повторяющегося шаблона шаблона. Я просто не понимаю, для чего это хорошо.
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