C++ пустой класс или определение типа

Я в настоящее время использую что-то как этот в моем коде:

class B : public A<C> { };

Разве не было бы лучше использовать определение типа?

typedef A<C> B;
5
задан gregseth 1 February 2010 в 13:05
поделиться

6 ответов

Это зависит. Если вы хотите A и B , чтобы быть различными, но связанными типами, B должны расширяться A . Если вы хотите, чтобы они были идентичны, вы должны использовать Typedef . Можете ли вы предоставить больше контекста?

16
ответ дан 18 December 2019 в 06:11
поделиться

Это зависит от того, что вы хотите. Если вы используете разные классы, чтобы настроить свой шаблон Meta-программирования, чем лучше создать B .

Если вы используете наследство, просто чтобы уменьшить набор набора, чем это не подходящее решение, и вы должны пойти с Typedef , они были введены для этого.

4
ответ дан 18 December 2019 в 06:11
поделиться

Наиболее определенно, если цель состоит в том, чтобы дать новое имя существующему типу данных, то используйте typedef.

-121--4554032-

Я предполагаю, что вы используете пустой класс, чтобы выйти из набора A < C > повторно. В таком случае, я думаю, что typedef - это лучшая идея. По крайней мере, это, кажется, путь это делается чаще всего.

Добавлю, что это только мое мнение. Люди не совсем согласны на использование typedef в целом. Хотя думаю, что в данном случае вполне нормально.

Прочитав ответ Джона Пурди, я хотел бы добавить, что вы должны использовать наследование, если вам нужно расширить А, а не иначе.

-121--4554035-

Зависит от того, что вы хотите, эффект не тот.

Типы C++ не являются «сильными», что в основном означает, что B и A < C > будут одного типа. Если вы хотите иметь возможность различать их, используйте класс.

Различные реализации сильного typedef можно найти по всему Интернету, например, повышение .

1
ответ дан 18 December 2019 в 06:11
поделиться

Это не совсем одинаково. Например, с Typedef вы можете сделать это:

typedef A<C> B;
func(B param) {...}
...
A<C> var;
func(var);
2
ответ дан 18 December 2019 в 06:11
поделиться

Наиболее определенно, если намерение состоит в том, чтобы дать новое имя существующему типу данных, тогда используйте typedef.

2
ответ дан 18 December 2019 в 06:11
поделиться

Ну, я предполагаю, что вы используете пустой класс для повторного набора A. В таком случае, я думаю, что печатать лучше. По крайней мере, кажется, что так это делается чаще всего.

Позвольте добавить, что это только мое мнение. Люди не совсем согласны с использованием typedef в целом. Хотя я думаю, что в этом случае все в порядке.

После прочтения ответа Джона Пёрди, я хотел бы добавить, что вы должны использовать наследование, если вам нужно расширить A, а не иначе.

1
ответ дан 18 December 2019 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: