ライブラリは、テンプレート引数として派生クラスを使用して派生するクラスを提供します。
例:
class userclass : public lib::superclass<userclass>
{}
ご覧のとおり、入力するのはかなり多いです。また、「ユーザークラス」は、正しく機能するために常にパブリックとして派生する必要があります。だから私はこのように見える2つのMACROを思いついた:
#define SUPER(x) public lib::superclass<x>
#define SUPERCLASS(x) class x : public lib::superclass<x>
ユーザーはいずれかを入力できるようになりました。
class userclass : SUPER(userclass)
{}
SUPERCLASS(userclass)
{}
しかし、主な問題は、マクロ SUPER および SUPERCLASS が、ヘッダーが含まれるのと同じ速さでユーザーのグローバル名前空間に存在することです。
できる/すべき:
- 名前空間の要件を維持しながら、パブリック派生をデフォルトにする方法はありますか?
- マクロはそのまま使用してください。
- ユーザーに完全な「public lib::superclass」を書き出すよう要求するだけです。
私はvs 11を使用しており、ライブラリはWindows開発者を対象としています。