Array
1 つのオブジェクトに複数のタイプのデータを保持できるベクトルのように、任意のタイプのオブジェクトを保持できる単純なクラスを設計しています。(これは学習用です。)
と呼ばれる空の基本クラスがありますContainer
。
class Container {};
と呼ばれるテンプレート化されたサブクラスObject
:
template <class T>
class Object : public Container {
T& object;
public:
Object(T& obj = nullptr) : object(obj) {}
};
s を保持するために使用する sへのポインターの a を保持するArray
クラスがあります。vector
Container
Object
class Array {
std::vector<Container *> vec;
public:
template <class T>
void add_element(const T&);
auto get_element(int);
};
add_element
要素をObject
s に格納し、それらをvec
:
template <class T>
void Array::add_element(const T& element)
{
vec.push_back(new Object<T>(element));
}
get_element
要素を削除Object
し、呼び出し元に戻します。ここに私の問題があります。から要素を削除するには、その要素のObject
タイプを知る必要がありObject
ます。
auto Array::get_element(int i)
{
return (Object</* ??? */> *)vec[i])->object;
}
保存しているオブジェクトの種類を確認する方法はありますか?
編集:人々はこれは不可能だと主張しているので、これはどうですか. クラス内に型情報を実際に格納する方法はありますか? (Rubyでそれができることは知っています)。それができればget_element
、 eachに の戻り値の型を格納できますObject
。