Matwey
тогда бы это было во всех режимах
а в режиме без оптимизации он небось насоздавал переменных в стеке, вместо регистров
Anonymous
не, в примере память вообще не используется, там всё помещается в регистры.
а, ну тогда прошу извинить, я сообщения выше не изучал подробно.
Anonymous
агась
Evgenii
где
Evgenii
для дебианоподобных есть apt.llvm.org
Evgenii
ну девелопмент версия же
Evgenii
без номера
Anonymous
я так думаю, что аргументы -D задаются перед проходом по CMakeLists.txt. Поэтому они и переопределяются им же.
Dmitry
-DCXX_STANDARD=11 нет?
Dmitry
тогда через CXX_FLAGS только
Anonymous
if (NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) endif ()
Dmitry
if (NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) endif ()
а перед этим option(CMAKE_CXX_STANDARD ...) тогда
Dmitry
нет?
Dmitry
лучше отдельную переменную завести
Dmitry
...
Dmitry
кстати, тоже недавно бодался с версией стандарта в cmake
Dmitry
нужно было получить флаг "-std=..." который установил cmake
Dmitry
через "$(CXX_FLAGS)" запилил
Dmitry
в круглых скобках аргумент мейкфайла
Anonymous
CMAKE_CXX_COMPILER_ID == "GNU" && CMAKE_CXX_STANDARD == 11 CMAKE_CXX_EXTENSIONS=OFF => -std=c++11 CMAKE_CXX_EXTENSIONS=ON => -std=gnu++11
Dmitry
не важно короче)
Anonymous
cmake же умеет VC++ использовать?
Berkus
да
Berkus
но для GNU конпилера именно такие флаги
Anonymous
ну тогда надо (очень сильно) устроить соц. опросик
Anonymous
Используешь VC++ для сборки проектов, использующих CMake?
Berkus
ответил нет, хотя собирал когда-то проект на vs2010, vs2015 и vs2017 из одного и того же cmakelists
Berkus
проект что-то типа 12 библиотек и экзешник + сборка инсталлера на WiX
Berkus
но раз вопрос "используешь" - нет, больше не страдаю фигней
Adobe
Привет! Я недавно начал изучать C++, а так пишу на шарпе. Мне в голову пришел интересный вопрос, начинается он со следующего: в C++ есть множественное наследование, в шарпе его нет, вместо этого есть множественная реализация интерфейсов. Выходит, как я понял, в C++ есть возможность множественно наследовать классы как абстрактные, так и конкретные. Здесь мне в голову приходит, что множ. наследовать классы от конкретных - вероятно не самая лучшая практика, самое верное приходит - один конкретный, 1 - n абстрактных. Вопрос: как вы поступаете?
Andrei
Да, всё верно. Имплементацию лучше наследовать только от одного класса.
Andrei
Причем это можно делать приватно.
Andrei
А еще можно предпочитать агрегирование наследованию, тоже неплохая практика, говорят.
Andrei
В идеале - обходиться без наследования вообще, кроме случаев когда оно необходимо
Я бы сказал так, что наследование интерфейса — плюс\минус ок, наследование имплементации — совсем не ок.
Adobe
Почему?
Ну я сам еще не понял, но читал у какого то автора, что наследование портит инкапсуляцию
Adobe
Спасибо за ответы, буду думать
доня.
Ну я сам еще не понял, но читал у какого то автора, что наследование портит инкапсуляцию
дело не в инкапсуляции, просто во-первых множественное наследование реализации сломано, а единичное наследование в большинстве случаев хуёво описывает связи в системе, а во-вторых дизайн построенный на наследовании реализации нерасширяем так что да, в идеале интерфейсы и композиция
Adobe
В шарпе нет возможности множественного наследования, но шарп - это довольно детерменизированный язык, ни шагу в сторону. В плюсах, как я вижу, уж очень много возможности для импровизации, потому и вопрос встал, вдруг есть какие то креативные способы использовать множественное наследование
доня.
Я бы сказал так, что наследование интерфейса — плюс\минус ок, наследование имплементации — совсем не ок.
имплементация интерфейса - это не "плюс/минус ок", лучше вообще ничего не придумали другой вопрос что в крестах всё это сделано криво, но шо ж поделать
Adobe
Хотя в принцыпе понятно. Это общий функционал между объектами разных классов, в итоге своего рода наследование. То есть, есть надстройка в виде некого объекта, реализующего функционал
доня.
ну вот нужен тебе класс который цепляется к базе данных и чё-то там шлёт, при том нужно работать с разными СУБД если делать на наследовании, то ты делаешь обобщённый класс а потом несколько унаследованных от него, каждый из которых работает с какой-то СУБД если на композиции, то логику соединения с базой ты выносишь в отдельный интерфейс, пишешь несколько классов реализующих его а в классе с основной логикой просто делаешь поле содержащее объект класса отвечающего за соединение т.е. очень грубо что-то типа interface IConnection { // ... } class MysqlConnection : IConnection { // ... } class PostgresqlConnection : IConnection { // ... } class Model<C> where C : IConnection { private C connection; // ... }
Adobe
А нет, понял
Adobe
То есть избавляешься от наследования, с помощью параметризации дженерика
доня.
Ага, даже так. Доходчиво. Выходит, далее можно комбинировать функционал таким образом в других классах (не в этом примере, а вообще)
в общем мы инкапсулируем какую-то функциональность за общим интерфейсом, который может иметь сколько угодно реализаций и повсюду используем эту функциональность не напрямую, а через общий интерфейс, чтобы реализацию легко было заменить
доня.
То есть избавляешься от наследования, с помощью параметризации дженерика
ну это один из вариантов можно (по крайней мере в C++ и Rust, за C# пояснить не готов, никогда не писал на нём) через динамический диспатчинг это сделать, тогда не будет дженерика, всё становится чуть проще но появляется некоторый оверхед в рантайме
Adobe
Да с дженериками всё максимально понятно В шарпе почти то же самое public class Model<C> : IConnection { private C connection; // ... }
доня.
так я и пытался на шарпе тебе написать) только у тебя же сама модель реализует IConnection, а должно быть чтобы C реализовывало
Adobe
А, ну да
Adobe
Тупанул. Ночь сидел, видать поспать пора скоро
доня.
> скоро да давно уже)
Adobe
> скоро да давно уже)
Почему то копаться лучше всего ночью получается. Никто не отвлекает. Инфы намного больше освоить получается,чем за то же дневное время
Burado
Ну эт образно.
Burado
Я так некоторые моменты забывал.
Burado
Код из шарпа походу
Adobe
А потом засыпаешь..и...почти ничего не помнишь.
Смотря сколько до этого днём поспать
доня.
Код из шарпа походу
ну я же сказал что я на шарпе набросал (хоть я его и не знаю, лол)
Burado
Сори, не увидел.
Adobe
interface IConnection { // ... } class MysqlConnection : IConnection { // ... } class PostgresqlConnection : IConnection { // ... } class Model<C> where C : IConnection { private C connection; // ... } Этот? Ну да. Так я его перепутал с cpp, генерики я на нём не писал пока что
Adobe
(в c++)
Burado
C++ generic = template.
Burado
В плюсах это принято называть шаблонами. Эт так, к слову.
Vladislav
templates > generics