Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
template<typename S, typename A, typename B>
S& operator<<(S& s, const std::pair<A,B>& p) {
return s << '(' << p.a << ',' << p.b << ')';
}
// Определяем has_iterator и т.д.
BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator);
BOOST_MPL_HAS_XXX_TRAIT_DEF(const_iterator);
BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type);
// Структура для теста "является ли тип стандартным контейнером (STL container)"
// Считаем, что тип это контейнер, если он содержит определение типов
// для iterator, const_iterator и value_type, но не является std::[w]string
template<typename T>
struct IsStdContainer
{
static const int value = boost::mpl::and_<
has_iterator<T>,
has_const_iterator<T>,
has_value_type<T>,
boost::mpl::not_<boost::is_same<T, std::string> >,
boost::mpl::not_<boost::is_same<T, std::wstring> >
>::value;
};
* This source code was highlighted with Source Code Highlighter.struct String
{
// ...
operator const char*() { return something; }
// ...
};
String s;
printf("%s", s);
Реализация ToString() на С++