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
Dmitry
нет?
Dmitry
лучше отдельную переменную завести
Dmitry
...
Dmitry
кстати, тоже недавно бодался с версией стандарта в cmake
Anonymous
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
не важно короче)
Berkus
Anonymous
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
А еще можно предпочитать агрегирование наследованию, тоже неплохая практика, говорят.
Vladislav
Привет! Я недавно начал изучать C++, а так пишу на шарпе. Мне в голову пришел интересный вопрос, начинается он со следующего: в C++ есть множественное наследование, в шарпе его нет, вместо этого есть множественная реализация интерфейсов. Выходит, как я понял, в C++ есть возможность множественно наследовать классы как абстрактные, так и конкретные. Здесь мне в голову приходит, что множ. наследовать классы от конкретных - вероятно не самая лучшая практика, самое верное приходит - один конкретный, 1 - n абстрактных. Вопрос: как вы поступаете?
В идеале - обходиться без наследования вообще, кроме случаев когда оно необходимо
Vladislav
Adobe
Vladislav
Adobe
Почему?
Ну я сам еще не понял, но читал у какого то автора, что наследование портит инкапсуляцию
Vladislav
Adobe
Спасибо за ответы, буду думать
Adobe
Adobe
В шарпе нет возможности множественного наследования, но шарп - это довольно детерменизированный язык, ни шагу в сторону. В плюсах, как я вижу, уж очень много возможности для импровизации, потому и вопрос встал, вдруг есть какие то креативные способы использовать множественное наследование
Andrey
Adobe
Adobe
Adobe
Хотя в принцыпе понятно. Это общий функционал между объектами разных классов, в итоге своего рода наследование. То есть, есть надстройка в виде некого объекта, реализующего функционал
доня.
ну вот нужен тебе класс который цепляется к базе данных и чё-то там шлёт, при том нужно работать с разными СУБД
если делать на наследовании, то ты делаешь обобщённый класс а потом несколько унаследованных от него, каждый из которых работает с какой-то СУБД
если на композиции, то логику соединения с базой ты выносишь в отдельный интерфейс, пишешь несколько классов реализующих его а в классе с основной логикой просто делаешь поле содержащее объект класса отвечающего за соединение
т.е. очень грубо что-то типа
interface IConnection
{
// ...
}
class MysqlConnection : IConnection
{
// ...
}
class PostgresqlConnection : IConnection
{
// ...
}
class Model<C> where C : IConnection
{
private C connection;
// ...
}
Adobe
Adobe
А нет, понял
Adobe
То есть избавляешься от наследования, с помощью параметризации дженерика
Adobe
Да с дженериками всё максимально понятно
В шарпе почти то же самое
public class Model<C> : IConnection
{
private C connection;
// ...
}
доня.
так я и пытался на шарпе тебе написать)
только у тебя же сама модель реализует IConnection, а должно быть чтобы C реализовывало
Adobe
А, ну да
Adobe
Тупанул. Ночь сидел, видать поспать пора скоро
доня.
> скоро
да давно уже)
Adobe
> скоро
да давно уже)
Почему то копаться лучше всего ночью получается. Никто не отвлекает. Инфы намного больше освоить получается,чем за то же дневное время
Adobe
Burado
Burado
Ну эт образно.
доня.
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