Я делаю чистый виртуальный деструктор, чтобы заставить класс быть абстрактным, который не содержит методов, кроме ctor. Я делаю это только для реализации заголовка
struct abstractSchema
{
abstractSchema(...): ... { ... }
virtual ~abstractSchema() = 0;
};
inline abstractSchema::~abstractSchema(){}
Есть ли синтаксический сахар, как (незаконный) virtual ~abstractSchema(){} = 0;
что позволило бы мне объявить и определить в одной строке, а не разделять определение и реализацию, как в приведенном выше примере?
Это так близко, как вы можете получить:
struct abstractSchema
{
virtual ~abstractSchema(){}
protected: abstractSchema(...): ... { ... }
};
Он не абстрактный, но сам по себе не может быть создан, поэтому может удовлетворить ваши потребности.
Вы можете:
struct abstractSchema
{
virtual ~abstractSchema() = 0 {}
};
Не уверен насчет стандартных совместимых компиляторов, но MSVC (2010) компилирует этот код просто отлично.