Я в настоящее время использую что-то как этот в моем коде:
class B : public A<C> { };
Разве не было бы лучше использовать определение типа?
typedef A<C> B;
Это зависит. Если вы хотите A
и B
, чтобы быть различными, но связанными типами, B
должны расширяться A
. Если вы хотите, чтобы они были идентичны, вы должны использовать Typedef
. Можете ли вы предоставить больше контекста?
Это зависит от того, что вы хотите. Если вы используете разные классы, чтобы настроить свой шаблон Meta-программирования, чем лучше создать B
.
Если вы используете наследство, просто чтобы уменьшить набор набора, чем это не подходящее решение, и вы должны пойти с Typedef
, они были введены для этого.
Наиболее определенно, если цель состоит в том, чтобы дать новое имя существующему типу данных, то используйте typedef.
-121--4554032- Я предполагаю, что вы используете пустой класс, чтобы выйти из набора A < C >
повторно. В таком случае, я думаю, что typedef - это лучшая идея. По крайней мере, это, кажется, путь это делается чаще всего.
Добавлю, что это только мое мнение. Люди не совсем согласны на использование typedef в целом. Хотя думаю, что в данном случае вполне нормально.
Прочитав ответ Джона Пурди, я хотел бы добавить, что вы должны использовать наследование, если вам нужно расширить А, а не иначе.
-121--4554035-Зависит от того, что вы хотите, эффект не тот.
Типы C++ не являются «сильными», что в основном означает, что B
и A < C >
будут одного типа. Если вы хотите иметь возможность различать их, используйте класс.
Различные реализации сильного typedef можно найти по всему Интернету, например, повышение .
Это не совсем одинаково. Например, с Typedef вы можете сделать это:
typedef A<C> B;
func(B param) {...}
...
A<C> var;
func(var);
Наиболее определенно, если намерение состоит в том, чтобы дать новое имя существующему типу данных, тогда используйте typedef.
Ну, я предполагаю, что вы используете пустой класс для повторного набора A
. В таком случае, я думаю, что печатать лучше. По крайней мере, кажется, что так это делается чаще всего.
Позвольте добавить, что это только мое мнение. Люди не совсем согласны с использованием typedef в целом. Хотя я думаю, что в этом случае все в порядке.
После прочтения ответа Джона Пёрди, я хотел бы добавить, что вы должны использовать наследование, если вам нужно расширить A, а не иначе.