1

これは私の(おそらく少し奇妙な)考えstd::setです。後で使用するためにいくつかのものを含むオブジェクトを定義したいとしますが、残念ながら、どのタイプがstd::set<not-sure>テンプレートargとして渡されるかわからないため、このnot-sureタイプが決定されます。次のような文字列を介して:

class X {
public:

foo()
{
    char not_sure_type[20]; 
    scanf("%s", not_sure_type);
    if (strcmp(not_sure_type, "int"))
        // then std::set<int>
    else if (// "char")
        // then std::set<char>
}

private:
void * _set;

};

このようにして、それstd::set<int>がインスタンス化されるかどうかを判断できますよね?しかし、どう_setすればあなたが指さなければならないことを知ることができますstd::set<int>か?それを知らずに、私も前後static_castにキャストするために使用する_setことvoid *はできません。std::set<int>*

std::set<int>では、後で使用するために、データメンバーのように保存できますか?

どんなアイデアでも大歓迎です。

4

2 に答える 2

5

実行時に(たとえば文字列に基づいて)set要素の型がわかっている場合は、抽象型へのポインターをset(set)に格納してから、のコンストラクターでAbstractFactoryを使用できます。提供された文字列に基づいて、実行時に要素の実際の具象型をインスタンス化するためのstd::setを保持するクラス。std :: setを持つクラス内でクリーンアップを実行する必要があるため、ここでrawポインタを使用することに問題があります。std :: setを使用するため、要素の具象型がComparableであることを確認してください。これが正しい方法かどうかはわかりませんが..あなたはアイデアを投げ入れると言いました...

于 2013-01-08T10:15:14.123 に答える
0

Pythonなどの弱い型の言語としてC++を使用することを検討しているように私には聞こえます。抽象基本クラスなどを使用するなどの回避策があることは確かですが、最終的には、実行時に型を定義することはc++のパラダイムに反すると思います。

于 2013-01-08T10:30:36.140 に答える