web-dev-qa-db-ja.com

C ++の「オブジェクト」クラス

Javaには、「Object」と呼ばれるジェネリッククラスがあり、すべてのクラスがのサブクラスです。リンクリストライブラリ(学校のプロジェクト用)を作成しようとしていますが、複数ではなく1つのタイプでのみ機能するように管理していますが、それに似たものはありますか?

編集:私はコードを投稿しますが、現時点では私にはありません。

19
user142852

C++には一般的な基本クラスはありません。

独自の実装を行い、そこからクラスを派生させることはできますが、ポリモーフィズムを利用するには、ポインター(またはスマートポインター)のコレクションを保持する必要があります。

編集:あなたの質問を再分析した後、私はstd::listを指摘しなければなりません。

複数のタイプに特化できるリストが必要な場合は、テンプレートを使用します(std::listはテンプレートです)。

std::list<classA> a;
std::list<classB> b;

単一のインスタンスでさまざまなタイプを保持できるリストが必要な場合は、基本クラスのアプローチを採用します。

std::list<Base*> x;
27
Luchian Grigore
class Object{
protected:
    void * Value;
public:



template <class Type>
void operator = (Type Value){
        this->Value = (void*)Value;
}

template <>
void operator = <string>(string Value){
        this->Value = (void*)Value.c_str();
}

template <class Type>
bool operator ==  (Type Value2){
        return (int)(void*)Value2==(int)(void*)this->Value;
}

template<>
bool operator == <Object> (Object Value2){
        return Value2.Value==this->Value;
}

template <class ReturnType>
ReturnType Get(){
    return (ReturnType)this->Value;
}

template <>
string Get(){
    string str = (const char*)this->Value;
    return str;
}

template <>
void* Get(){

    return this->Value;
}

void Print(){
    cout << (signed)this->Value << endl;
}


};

次に、そのサブクラスを作成します

5
MuffinMan