1

次の質問から受け入れられた回答に従って、私のおもちゃの言語でboost::anyをエミュレートしようとしています。

boost::any に似たクラスの値へのアクセス

私は持てます、

Element e1 = 11;
Element e2 = 12.1;

+ をオーバーロードしたいので、

e3 = e1 + e2;

しかし、実行時に e1 が int を保持するか double を保持するかはわかりませんが、数値になります。では、正しい Get メソッドを呼び出すことができるように、どのような種類の要素が保持されているかを示す変数も保存されるように const を変更するにはどうすればよいでしょうか。


    template /typename Datatype/
    Element(Datatype InitialValue)
    {
        StoredValue = new ValueStorage(InitialValue);
    }

また、例外がなく、-fno-rtti をコンパイラに渡し、stdlib または boost を使用できないマイクロプロセッサでこれを行っています。

4

1 に答える 1

0

おそらく、Curiously recurring テンプレート パターンが役に立ちます。class Derivedアイデアは、派生クラスに設定されたテンプレート引数を使用して基本クラスを継承することです (これは、書き留めた直後にソースで有効な識別子であるため、正当です)。これが仮想関数よりもメモリがまばらであるかどうかはわかりませんが、確かにそれらを回避します:)。

メモリが少ない場合は、別の言語 (C?) に移行するオプションを評価する必要があるかもしれません。組み込みシステムでは C++ はそれほど軽量ではないからです。

于 2011-04-26T14:52:15.570 に答える