1
ベクトルをタイプ別にソートして検索したい(すべて同じベースから継承)。これまで私はタイプを比較するためにstd::type_index
を利用してきました。私のコードはタイプ別にベクトルを並べ替え、タイプ別に検索するまたは派生タイプ
bool compareType(Base* const& left, Base* const& right)
{
return std::type_index(typeid(*left)) < std::type_index(typeid(*right));
}
std::vector<Base*> m_list;
template <typename T>
T* search()
{
T example;
auto it = std::lower_bound(m_list.begin(), m_list.end(), &example, compareType);
if(it != m_list.end())
{
return dynamic_cast<T*>(*it);
}
return nullptr;
}
のように見えるこれは、これまでうまく働いたが、私は今、私の検索方法でも、それは探していますし、私はどのようについて行くには見当もつかない1つに由来している任意の型を返すようにしたいです。 Base
が多型である
class Base {};
class DerivedA : public Base {};
class DerivedA1 : public DerivedA {};
class DerivedA1I : public DerivedA1 {};
// Calling this looks for a DerivedA, but can also return a DerivedA1 OR DerivedA1I
DerivedA* result = search<DerivedA>();
[ 'のstd :: is_base_of'](http://en.cppreference.com/w/cpp/types/is_base_ofを)あなたを助けるかもしれない。 – NathanOliver
@ NathanOliverは 'std :: is_base_of'はC++ 11ですか?あるいは、すでにC++ 11を共通の標準と考えていますか? (私は私が知っている... :) – user1810087
@ user1810087ええ、C + + 11はかなり一般的でなければなりません。 C++タグは現行の標準(So C++ 14)を意味します。そうでないと指定しない限り、私は現在の標準のものをバックで使うことができます。 – NathanOliver