template <class T> class Foo {};
class Manager {
std::unordered_map<size_t, std::unique_ptr<std::vector<void *>>> _mFoos;
public:
template <class T> void addFoo(Foo<T> &foo) {
int x = typeid(T).hash_code();
// Safe ? :
auto &p = *(reinterpret_cast<std::unique_ptr<std::vector<Foo<T>>> *>(&_mFoos[x]));
if (p == nullptr) {
p.reset(new std::vector<Foo<T>>);
}
auto &foos = *p;
foos.push_back(foo);
};
template <class T> Foo<T> &getFoo(int index) {
int x = typeid(T).hash_code();
auto it = _mFoos.find(x);
auto &foos = *(reinterpret_cast<std::vector<Foo<T>> *>(it->second.get()));
return foos[index];
};
};
Безопасно ли и доступно для reinterpret_cast уникальное_ptr < T> in unique_ptr < T2> если T и T2 - два разных типа? Имеют ли они одинаковый размер и одну и ту же битовую диаграмму?Можно ли конвертировать тип уникального_ptr?
В качестве побочного примечания, я думаю, что ваши указатели находятся не в нужных местах. У вас есть указатель на «вектор», а затем на «вектор» указателей. –
Пожалуйста, 1 вопрос за раз. – sehe