私はケレックの答えが好きです。そうすれば、クラスをインスタンス化できないため、抽象化されます。
ただし、クラスの宣言全体に目を通し、デストラクタが仮想であることを確認しない限り、クラスが抽象であることは明らかではありません。
私が持っていた別のアイデアは、を使用して「抽象」という単語のプリプロセッサ定義を作成できることです#define
。このようにして、次のようなことができます。
abstract struct Foo {};
それは
struct Foo {};
これで私が目にする問題は、これがクラスを抽象化することを強制しないため、マクロを使用して仮想デストラクタも宣言できることです。何かのようなもの:
#define ABSTRACT_CLASS(class_name) \
class class_name { \
virtual ~class_name() = 0; //
そして、次のように使用します。
ABSTRACT_CLASS(Foo) {
// class declaration
};
これは次のようになります。
class foo {
virtual ~class_name() = 0; // {
// class declaration
};
免責事項: 私のマクロは少しずれている可能性があります。~ と () が変数名に触れている class_name を実際に貼り付けるかどうかはわかりません。また、これを自分で行うかどうかはわかりません。特にブレースをコメントアウトすることは、次の行に配置すると機能しないため、最も美しいソリューションではありません。しかし、あなたは何かを抽象としてマークする方法を尋ねたので、私はそれをあなたに与えました!