Может ли класс наследовать от другого шаблона класса, который конкретизируется сам по себе?

Я шел через некоторый код, и я нашел что-то вроде этого:

class GarbageCollectorProcess : public process::Process<GarbageCollectorProcess>

Мне было интересно, если это было действительным, что нужно сделать. Если да, не должно ли это привести к некоторому циклу самоопределения, потому что мы определяем GarbageCollectorProcess с использованием другого класса, который зависит от определения GarbageCollectorProcess?

2 ответа

"Мне было интересно, если это было действительным, что нужно сделать".

Да, это действительно так, а также очень распространенный шаблон, называемый Curious Recurring Template Pattern, или короткий CRTP.

Например, он используется для реализации статического полиморфизма.

"Если да, не должно ли это привести к некоторому циклу самоопределения, потому что мы определяем GarbageCollectorProcess, используя другой класс, который зависит от определения GarbageCollectorProcess?"

Нет, там нет цикла самоопределения. Класс шаблона создается только один раз.

Это действительно так. Вот как работает CRTP.

Другие вопросы по тегам