Re: Как отличить контейнер от простого значения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.10.07 12:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть такой метод:


А>template <class _ValueType>

А>bool GetValue(const std::string& value_name, _ValueType& value);

А>_ValueType — может быть как простым значением так и контейнером.


заведи traits, типа такого:
template <class T>
struct is_container
{
  enum { value = false };
};

и специализируй его для типов, которые являются контейнерами
template <>
struct is_container<std::string>
{
  enum { value = true };
};


Кстати, так как у всех STL-контейнеров определен тип value_type, то можно сделать что-нть вроде (в таком виде не скомпилируется, но идея, думаю, понятна):
template <class T>
struct is_container
{
  typedef typename T::value_type v;
  enum { value = true };
};

тогда по SFINAE для всех STL-контейнеров is_container<...>::value == true.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.