からタイプを推測:その関数Work
を想定は、次の例を考えボイドポインタ
class MyContainer {
std::vector<void *> v;
public:
void Put(void *x) { v.push_back(x);}
void* Get(int index) { return v[index];}
};
void Work (MyContainer& c) {
// cast_to_type(c.Get(0));
}
int main() {
int x = 1;
double y = 2.0;
MyContainer c;
c.Put(&x);
c.Put(&y);
Work(c);
return 0;
}
をベクトルポインタが指すようにオブジェクトについて何も知りません。また、継承はオプションではなく、指し示されたオブジェクトのタイプは任意であることができます(無限のタイプがあります)。
MyContainer::Get
関数が返すvoidポインタだけを使用して型を推論することはできますか?キャスト、テンプレート、typeid
オペレータの任意の組み合わせを使用してこれを行うことはできますか?
短い回答:いいえ。 –
テンプレートを使用してオブジェクトをラップし、ラップされたオブジェクトにポインタを配置するとどうなりますか?テンプレートを使用して、何らかの形で情報を保存することはできますか? – Diggy
@Diggy:直接ではありませんが、このラッパーを使用して継承を適用できるようになりました。 ['boost :: any'](http://www.boost.org/doc/libs/1_49_0/doc/html/any.html)を参照してください。 – Xeo