Является ли использование ключевого слова расширения MSVCC «абстрактным» после имени класса хорошей практикой? - PullRequest
1 голос
/ 20 февраля 2012

Рассмотрим следующий пример:

class CBase abstract
{
protected:
    CBase() { }
};

Я мог бы избавиться от защищенного конструктора или от ключевого слова ' abstract '.Ключевое слово интуитивно понятно, но, насколько мне известно, оно не поддерживается другими компиляторами (особенно Gcc).

Мне также было интересно, достаточно ли легко написать какой-нибудь макрос для подготовки этого кода для компиляции g ++.Я хочу минимизировать изменения кода, если я когда-либо хотел скомпилировать свой код в системе, отличной от MS Windows.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Как насчет чистого виртуального деструктора с пустым определением, т.е.

class CBase {
public:
  virtual ~CBase() = 0;
}

inline CBase::~CBase() {}

Любой, даже не приличный компилятор C ++ поддерживает это, а стандарт это позволяет.

1 голос
/ 20 февраля 2012

Макрос будет тривиальным: #define abstract. Ключевое слово не добавляет функциональности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...