Объявить и реализовать чистый виртуальный деструктор в одну строку?

Я делаю чистый виртуальный деструктор, чтобы заставить класс быть абстрактным, который не содержит методов, кроме ctor. Я делаю это только для реализации заголовка

struct abstractSchema
{
    abstractSchema(...): ... { ... }
    virtual ~abstractSchema() = 0;    
};
inline abstractSchema::~abstractSchema(){}

Есть ли синтаксический сахар, как (незаконный) virtual ~abstractSchema(){} = 0; что позволило бы мне объявить и определить в одной строке, а не разделять определение и реализацию, как в приведенном выше примере?

2 ответа

Решение

Это так близко, как вы можете получить:

struct abstractSchema
{
    virtual ~abstractSchema(){}
    protected: abstractSchema(...): ... { ... }
};

Он не абстрактный, но сам по себе не может быть создан, поэтому может удовлетворить ваши потребности.

Вы можете:

struct abstractSchema
{
    virtual ~abstractSchema() = 0 {}
};

Не уверен насчет стандартных совместимых компиляторов, но MSVC (2010) прекрасно компилирует этот код.

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