быстрый вопрос :
Можно ли сделать указатель, который может ссылаться на std::vector<std::vector<int> >
или std::vector<std::vector<double>>
?
Спасибо
быстрый вопрос :
Можно ли сделать указатель, который может ссылаться на std::vector<std::vector<int> >
или std::vector<std::vector<double>>
?
Спасибо
Если использование повышения является вариантом, вы можете использовать boost:variant
. Технически это не указатель, а типобезопасный контейнер с одним элементом, но он должен иметь возможность выполнять свою работу, не прибегая к способу использования «больших орудий» с использованием void*
.
Если вам нужно, вы можете использовать конструкцию объединения
union intordouble
{
int x;
double d;
};
int main()
{
vector<intordouble> v;
return 0;
}
По сути, вектор всегда является объединением intordouble, поэтому у вас есть указатель на него, и вам не нужно различать его. Пожалуйста, взгляните на Хорошая практика использования союзы в C++?
boost::variant
.
- person Mike Seymour; 18.01.2012
<bad_guy_mode>
typedef std::vector<std::vector<int>>* vvi_ptr;
typedef std::vector<std::vector<double>>* vvd_ptr;
union int_or_double_vecs{
vvi_ptr int_vector;
vvd_ptr double_vector;
};
(Обратите внимание, что одновременно доступен только один член, и это только тот, который вы настроили последним.)
</bad_guy_mode>
void*
может указывать на любой из них, но перед использованием должен быть приведен к правильному типу.
Типизированный указатель может указывать только на указанный тип, включая типы, которые унаследованы от него. Различные специализации vector
представляют собой разные типы и не имеют общего базового класса, поэтому ни один типизированный указатель не может указывать на оба из них.
Если вы считаете, что это действительно то, что вам нужно сделать, вы можете рассмотреть возможность использования размеченного союза, такого как boost::variant
для хранения различных типов указателей.
std::vector<std::vector<int> >
илиstd::vector<std::vector<double> >
? - person Oliver Charlesworth   schedule 18.01.2012double
илиint
. вот так:vector<vector<IntOrDouble>> *p
- person TeaOverflow   schedule 18.01.2012