template < class Tp, class C = std::list<Tp>, size_t Tag = 5 >
class accountant {};
class D1 : accountant<double> {};
class D2 : accountant<double, void, void> {};
Хотелось бы узнать как будут отличаться производные классы, если эти два выражения не идентичны? Или все таки они идентичны?..
По причине того, что я неправильно задал интересующий мне вопрос, добавлю ниже
класс D2
не компилируется, а вот это:
class It : public std::iterator<std::random_access_iterator_tag, int, void, void, void>{};
компилируется. И вот это тоже:
class It : public std::iterator<std::random_access_iterator_tag, int> {};
В чем причина? И в чем разница между первым определением класса It и вторым?
Хотелось бы понять, как вы собираетесь скомпилировать
class D2 : accountant<double, void, void> {};
подставляя void
вместо значения? :)
Но в любом случае они будут различны. Как будут различны классы
class D1: public Base {};
class D2: public Base {};
А вот, скажем,
accountant<double>
и
accountant<double,std::list<double>,5>
эти будут идентичными.
Update
Вот как iterator
определен в VC++2017:
template<class _Category,
class _Ty,
class _Diff = ptrdiff_t,
class _Pointer = _Ty *,
class _Reference = _Ty&>
struct _CXX17_DEPRECATE_ITERATOR_BASE_CLASS iterator
{ // base type for iterator classes
using iterator_category = _Category;
using value_type = _Ty;
using difference_type = _Diff;
using pointer = _Pointer;
using reference = _Reference;
};
Видно, что три последние параметра шаблона - просто типы, со значениями по умолчанию. void
- тоже просто тип... так что его можно использовать в качестве аргументов шаблона. Если не использовать ничего - то этими типами в вашем варианте (для int
) будут ptrdiff_t
, int*
и int&
.
Оба варианта компилируются - пока вы не попытаетесь использовать, скажем, псевдоним pointer
для определения переменной или что-нибудь в этом роде, где void
использовать категорически нельзя.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Несколько дней назад по необъяснимым мне пока причинам фоновая работа selenium'а (через Xvfb) стала сопровождаться автоматическим запуском экземпляра...
Узнать место на Sd-card или Внутренеей памяти Android какие методы?