C ++: функция с вектором любого производного класса на входе - PullRequest
2 голосов
/ 05 августа 2011

Давайте иметь следующую простую функцию (тело моей функции более сложное, но для простоты):

unsigned VctSize(const vector< Base_class > vct) {
  return vct.size()
}

Как я могу заставить функцию принимать векторы производных классов Base_class на входе?И можно ли заставить функцию принимать векторы любого типа?

Другими словами, я хотел бы написать одну функцию, которая принимает вектор любого производного класса Base_class и использует только векторную манипуляцию (без членов или членовфункции производных классов).

1 Ответ

3 голосов
/ 05 августа 2011

Это будет принимать векторы любого типа

template <class T>
unsigned VecSize(const vector<T>& vct)
{
    return vct.size();
}

Чтобы принимать только векторы производных классов, вы можете использовать boost :: enable_if

template<class T>
typename enable_if<is_base_and_derived<BaseClass, T>, unsigned>::type 
VecSize(const vector<T>& vct)
{
   return vct.size();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...