Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2013, 22:08   #11
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Ну так-то да, может и было в качестве примера "как не нужно делать". ) Но тогда получается, что он все же "разделяет это мнение".
Son Of Pain вне форума Ответить с цитированием
Старый 28.12.2013, 18:05   #12
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от xe3 Посмотреть сообщение
Чисто теоретический вопрос. Есть два варианта сконструировать темплэйт из двух классов:

Код:
class somearray: public array<something> {};
и

Код:
typedef array<something> somearray;
какой предпочтительнее и почему?
Второй вариант предпочтительнее.
Потому что он состоит из одной простой строки, и не содержит потенциальных проблем.

Первый вариант потребует написания конструкторов, и может породить проблемы, если человек унаследовался неграмотно.

Ну и нафига проблемы, если можно сделать просто и гарантированно без проблем?
_Bers вне форума Ответить с цитированием
Старый 01.01.2014, 20:47   #13
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
...Первый вариант потребует написания конструкторов, и может породить проблемы, если человек унаследовался неграмотно.
...?
Еще такой вариант есть (у Страуструпа увидел):
Код:
struct guarded_thread : std::thread {
    using std::thread::thread;           // Наследуем все конструкторы от std::thread
    ~guarded_thread() { if (this->joinable()) this->join(); }
};

// Подавление "override"
struct B1 {
    void f(int);
};
struct B2 {
    void f(double);
};
struct D : B1, B2 {
    using B1::f;
    using B2::f;
    void f(char);
};

void use(D d)
{
    d.f(1);   // call D::f(int), that is, B1::f(int)
    d.f('a'); // call D::f(char)
    d.f(1.0); // call D::f(double), that is, B2::f(double)
}
// A name brought into a derived class scope by a using-declaration has 
// its access determined by the placement of the using declaration;
// see §20.5.3. We cannot use using-directives to bring all members of 
// a base class into a derived class.
P.S Имхо, лучше про typedef забыть, using более гибкая штука (можно использовать с шаблонами:
Код:
template <typename _Ty>
    using my_array = std::vector<_Ty>;
using simple_array = std::vector<int>;

Последний раз редактировалось 220Volt; 01.01.2014 в 20:57.
220Volt вне форума Ответить с цитированием
Старый 04.01.2014, 01:22   #14
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от 220Volt Посмотреть сообщение
Еще такой вариант есть (у Страуструпа увидел):
Код:
struct guarded_thread : std::thread {
    using std::thread::thread;           // Наследуем все конструкторы от std::thread
    ~guarded_thread() { if (this->joinable()) this->join(); }
};
Не знал о том, что можно расшарить видимость конструкторов базового класса, как конструкторы потомка.
Однако, это не жрет ни вижал студия, ни гцц, ни шланг:
http://rextester.com/INXXXF37813
http://rextester.com/JFPCL38652
_Bers вне форума Ответить с цитированием
Старый 04.01.2014, 06:49   #15
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Не знал о том, что можно расшарить видимость конструкторов базового класса, как конструкторы потомка.
Однако, это не жрет ни вижал студия, ни гцц, ни шланг:
http://rextester.com/INXXXF37813
http://rextester.com/JFPCL38652
Это новая c++11 фишка, видимо там компиляторы старые. У меня gcc 4.8.1 это кушает.
220Volt вне форума Ответить с цитированием
Старый 04.01.2014, 18:03   #16
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Не знал о том, что можно расшарить видимость конструкторов базового класса, как конструкторы потомка.
Однако, это не жрет ни вижал студия, ни гцц, ни шланг:
gcc жрет, начиная с версии 4.8. Студия - начиная с 2013 rtm. Шланг - с какой-то из недавних версий (3.3, кажется).
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что лучше использовать? Lindemann66 C/C++ Базы данных 11 01.09.2011 10:21
Что лучше использовать для построения подобного графика? CallMeJammer Общие вопросы Delphi 7 16.05.2011 19:15
3d графики: что вообще есть и что лучше использовать Krasi Общие вопросы по Java, Java SE, Kotlin 1 09.05.2011 14:41
HML или ACCESS что лучше использовать? Inbox БД в Delphi 2 15.05.2007 19:13