と仮定1は、多重継承せずに、クラス階層を持っていますは、共通の基本クラスを検出
struct TOP{};
struct L : TOP{};
struct R : TOP{};
struct LL : L{};
struct LR : L{};
struct RL : R{};
struct RR : R{};
は、それには2つのタイプの一般的な塩基の種類を返します。メタ関数を記述することは可能ですか? (ない共通の基底クラスが存在する場合、それはvoid
を返すことができます。) 例えば
common_base<RR, R>::type == R
common_base<RL, RR>::type == R
common_base<LL, RR>::type == TOP
common_base<LL, std::string>::type == void
明らかにこれは、複数のinhertanceでは動作しないだろうが、私は、単一継承の場合に焦点を当てています。
まず、基本クラスのイントロスペクションがなければ、それは可能ではないようです。だから、私はこれを簡単な問題を持って、各CLASEは(内部base
タイプによって)そのベースを知っているような方法でそれを行う、例えば:
struct LR : L{using base = L;};
でも、このように、私はメタプログラミングを得るように見えることはできません右。
また、GCCに共通の基底クラスを検出するための拡張機能がいくつかあります(私はそれを見つけることができません)。それは事実ですか?
'common_base :: type'は' RR'か 'R'ですか? –
@JamesRoot、 'RR'。 – alfC