
reagentoo
13.08.2017
22:54:06
не важно короче)

Berkus
13.08.2017
22:54:16

fox.cpp
13.08.2017
22:54:30
cmake же умеет VC++ использовать?

Google

Berkus
13.08.2017
22:56:14
да
но для GNU конпилера именно такие флаги

Alexander
13.08.2017
22:56:33

fox.cpp
13.08.2017
22:56:41
ну тогда надо (очень сильно) устроить соц. опросик
Используешь VC++ для сборки проектов, использующих CMake?

Berkus
13.08.2017
22:57:39
ответил нет, хотя собирал когда-то проект на vs2010, vs2015 и vs2017 из одного и того же cmakelists
проект что-то типа 12 библиотек и экзешник + сборка инсталлера на WiX
но раз вопрос "используешь" - нет, больше не страдаю фигней

Alexander
13.08.2017
23:03:55
ну а у меня на работе всё виндовое, так что юзаю
https://blogs.msdn.microsoft.com/vcblog/2017/08/11/c17-features-and-stl-fixes-in-vs-2017-15-3/

Thomas
14.08.2017
03:53:15
Привет! Я недавно начал изучать C++, а так пишу на шарпе. Мне в голову пришел интересный вопрос, начинается он со следующего: в C++ есть множественное наследование, в шарпе его нет, вместо этого есть множественная реализация интерфейсов. Выходит, как я понял, в C++ есть возможность множественно наследовать классы как абстрактные, так и конкретные. Здесь мне в голову приходит, что множ. наследовать классы от конкретных - вероятно не самая лучшая практика, самое верное приходит - один конкретный, 1 - n абстрактных. Вопрос: как вы поступаете?

Andrei
14.08.2017
03:55:54
Да, всё верно. Имплементацию лучше наследовать только от одного класса.
Причем это можно делать приватно.

Google

Andrei
14.08.2017
03:56:39
А еще можно предпочитать агрегирование наследованию, тоже неплохая практика, говорят.

Vladislav
14.08.2017
04:05:07
Привет! Я недавно начал изучать C++, а так пишу на шарпе. Мне в голову пришел интересный вопрос, начинается он со следующего: в C++ есть множественное наследование, в шарпе его нет, вместо этого есть множественная реализация интерфейсов. Выходит, как я понял, в C++ есть возможность множественно наследовать классы как абстрактные, так и конкретные. Здесь мне в голову приходит, что множ. наследовать классы от конкретных - вероятно не самая лучшая практика, самое верное приходит - один конкретный, 1 - n абстрактных. Вопрос: как вы поступаете?
В идеале - обходиться без наследования вообще, кроме случаев когда оно необходимо

Thomas
14.08.2017
04:05:29

Vladislav
14.08.2017
04:05:41

Andrei
14.08.2017
04:06:53

Thomas
14.08.2017
04:07:23
Почему?
Ну я сам еще не понял, но читал у какого то автора, что наследование портит инкапсуляцию

Vladislav
14.08.2017
04:07:55

Thomas
14.08.2017
04:09:07
Спасибо за ответы, буду думать

Даниил
14.08.2017
04:13:08

Thomas
14.08.2017
04:13:51
В шарпе нет возможности множественного наследования, но шарп - это довольно детерменизированный язык, ни шагу в сторону. В плюсах, как я вижу, уж очень много возможности для импровизации, потому и вопрос встал, вдруг есть какие то креативные способы использовать множественное наследование

Даниил
14.08.2017
04:17:41

Andrey
14.08.2017
04:18:12

Thomas
14.08.2017
04:18:36
Хотя в принцыпе понятно. Это общий функционал между объектами разных классов, в итоге своего рода наследование. То есть, есть надстройка в виде некого объекта, реализующего функционал


Даниил
14.08.2017
04:40:09
ну вот нужен тебе класс который цепляется к базе данных и чё-то там шлёт, при том нужно работать с разными СУБД
если делать на наследовании, то ты делаешь обобщённый класс а потом несколько унаследованных от него, каждый из которых работает с какой-то СУБД
если на композиции, то логику соединения с базой ты выносишь в отдельный интерфейс, пишешь несколько классов реализующих его а в классе с основной логикой просто делаешь поле содержащее объект класса отвечающего за соединение
т.е. очень грубо что-то типа
interface IConnection
{
// ...
}
class MysqlConnection : IConnection
{
// ...
}
class PostgresqlConnection : IConnection
{
// ...
}
class Model<C> where C : IConnection
{
private C connection;
// ...
}

Thomas
14.08.2017
04:46:13
А нет, понял

Google

Thomas
14.08.2017
04:48:49
То есть избавляешься от наследования, с помощью параметризации дженерика

Даниил
14.08.2017
04:49:56

Thomas
14.08.2017
04:54:28
Да с дженериками всё максимально понятно
В шарпе почти то же самое
public class Model<C> : IConnection
{
private C connection;
// ...
}

Даниил
14.08.2017
04:55:31
так я и пытался на шарпе тебе написать)
только у тебя же сама модель реализует IConnection, а должно быть чтобы C реализовывало

Thomas
14.08.2017
04:56:24
А, ну да
Тупанул. Ночь сидел, видать поспать пора скоро

Даниил
14.08.2017
04:57:25
> скоро
да давно уже)

Thomas
14.08.2017
04:59:10
> скоро
да давно уже)
Почему то копаться лучше всего ночью получается. Никто не отвлекает. Инфы намного больше освоить получается,чем за то же дневное время


Влад
14.08.2017
05:11:50
Ну эт образно.

Даниил
14.08.2017
05:12:16

Влад
14.08.2017
05:12:17
Я так некоторые моменты забывал.
Код из шарпа походу

Thomas
14.08.2017
05:12:58

Даниил
14.08.2017
05:13:20

Влад
14.08.2017
05:13:47
Сори, не увидел.

Thomas
14.08.2017
05:15:40
interface IConnection
{
// ...
}
class MysqlConnection : IConnection
{
// ...
}
class PostgresqlConnection : IConnection
{
// ...
}
class Model<C> where C : IConnection
{
private C connection;
// ...
}
Этот? Ну да. Так я его перепутал с cpp, генерики я на нём не писал пока что

Google

Thomas
14.08.2017
05:17:35
(в c++)

Влад
14.08.2017
05:17:51
C++ generic = template.
В плюсах это принято называть шаблонами. Эт так, к слову.

Vladislav
14.08.2017
05:18:20
templates > generics

F.L
14.08.2017
05:18:23
???

Ilia
14.08.2017
05:18:55
Да, всё верно. Имплементацию лучше наследовать только от одного класса.
С фига ли ?
Вообще, ваши рассуждения примерно похожи на следу:
"Коллеги, я всё время сплю в женской ночной рубашке, но недавно мне подарили настоящую мужскую пижаму. Я знаю, что ночные рубашки надевают только через голову, но пижаму так не надеть целиком, верхняя часть надевается через голову, а нижняя — нет. Я слышал, что в принципе пижаму можно целиком как-то надеть, но мне приходит в голову, что надевать пижаму через ноги — вероятно, не самая лучшая практика. Как же вы одеваете пижаму ?
Знаток пижам: "Да, всё верно, пижаму нужно надевать только через голову"!

F.L
14.08.2017
05:19:02
Мне слух режет когда вместо шаблона говорят дженерик
Думаю скоро привыкну

Влад
14.08.2017
05:19:31
Эт не вместо.

Admin
ERROR: S client not available

Thomas
14.08.2017
05:19:32

Влад
14.08.2017
05:19:53
Просто шарписты и джависты так говорят, ибо в их ЯП так называется.

Vladislav
14.08.2017
05:20:30

Ilia
14.08.2017
05:20:44
как бы генерики и шаблоны —- немного разные вещи

Влад
14.08.2017
05:20:48
Эт да.

Даниил
14.08.2017
05:21:00
С фига ли ?
Вообще, ваши рассуждения примерно похожи на следу:
"Коллеги, я всё время сплю в женской ночной рубашке, но недавно мне подарили настоящую мужскую пижаму. Я знаю, что ночные рубашки надевают только через голову, но пижаму так не надеть целиком, верхняя часть надевается через голову, а нижняя — нет. Я слышал, что в принципе пижаму можно целиком как-то надеть, но мне приходит в голову, что надевать пижаму через ноги — вероятно, не самая лучшая практика. Как же вы одеваете пижаму ?
Знаток пижам: "Да, всё верно, пижаму нужно надевать только через голову"!
то есть ты всерьёз считаешь что множественное наследование реализации - это нормально и надо так делать? мда

Влад
14.08.2017
05:21:19

F.L
14.08.2017
05:21:21

Thomas
14.08.2017
05:22:14

Vladislav
14.08.2017
05:23:09
С фига ли ?
Вообще, ваши рассуждения примерно похожи на следу:
"Коллеги, я всё время сплю в женской ночной рубашке, но недавно мне подарили настоящую мужскую пижаму. Я знаю, что ночные рубашки надевают только через голову, но пижаму так не надеть целиком, верхняя часть надевается через голову, а нижняя — нет. Я слышал, что в принципе пижаму можно целиком как-то надеть, но мне приходит в голову, что надевать пижаму через ноги — вероятно, не самая лучшая практика. Как же вы одеваете пижаму ?
Знаток пижам: "Да, всё верно, пижаму нужно надевать только через голову"!
можно показать пример, когда множественное наследование имплементации реально полезно?

Даниил
14.08.2017
05:23:15

Google

Thomas
14.08.2017
05:23:23
generic - runtime template - compile time, что то вроде этого. ну и тележка сверху

Friedrich
14.08.2017
05:25:57

Thomas
14.08.2017
05:26:42
В принципе не плохо, по моему
(говорю не из-за моего c# бэкграунда)

Friedrich
14.08.2017
05:28:20
У них там просто #define interface class, по-моему. А код дополнительно анализируется какой-то тулой, чтоб эти интерфейсы оборачивать в TLB.

Vladislav
14.08.2017
05:28:24

Thomas
14.08.2017
05:29:11

Friedrich
14.08.2017
05:29:55

Thomas
14.08.2017
05:29:58

Friedrich
14.08.2017
05:31:03
Хотя может, конечно, ты пишешь на C++/CLI или C++/CX. Там есть настоящие интерфейсы. Одна проблемка — это не настоящий С++ :)

Thomas
14.08.2017
05:31:07

Friedrich
14.08.2017
05:31:26
Погодь, это уже не interface, а какой-то __interface.

Thomas
14.08.2017
05:31:29
Разве что потом это GCC сбилдить
ага, я упустил деталь

Friedrich
14.08.2017
05:31:45
Ещё более глубокие глубины ада.
Я бы такое в современном коде не советовал использовать. Придерживайся стандарта, это максимально безопасно.

Vladislav
14.08.2017
05:32:54

Friedrich
14.08.2017
05:33:12
Много есть всяких кадавров, собранных из C++ и других языков :)