Constantine
auto f = [](int(y(int))) {};
Aidar
ну тип
Kirill
Ты же на этапе вызова лямбды можешь только узнать кто с кем ее вызвал, собственно а auto это compile time
Aidar
или ошибка
Aidar
там речь о том чтоб не писать auto
Constantine
auto f = [](auto y(int)) {};
мне сейчас вижак скомпилил
Aidar
да это функция же нет?
Constantine
ну смотри, x(y) кто тип?
Constantine
или никто?
Constantine
выражение auto y(int) означает переменную y
Aidar
это тип
Aidar
это тип потомучто нет возвращаемого значения у фукнции
Aidar
у тебя не тип auto
Aidar
а тип функция
Aidar
а у функции должно быть возвращаемое значние
Constantine
ты говоришь, что должно по умолчанию auto подставляться же
Aidar
да если подразумевается тип
Alexey
Немного не в тему вопрос)
Насколько жесткий диск влияет на скорость компиляции?
Если компилировать на ссд, будет ли это заметно быстрее?
Aidar
да
Constantine
в смысле, если выражение _похоже_ на объявление переменной?
Aidar
в рам компилируй
Aidar
ну по факту тут тип - функция же это явно видно никак иначе не растолковать
Aidar
тоесть тип задан уже
Владислав
/
Aidar
ты говоришь подставлять авто чтоб поменять тип
Aidar
я говорю подставлять авто только если тип не задан
Constantine
auto f = [](auto&(x)) {};
опять же, компилируется
Aidar
да таместь баги с struct x{}
[](x){}
Constantine
здесь как раз легко, известно, что x тип
Aidar
чисто синтаксически неизвестно
Constantine
?
Constantine
x тип объявлен как тип, с этого момента это тип
Constantine
вроде весь парсер выражений плюсов ломается, если заранее неясно какие идентификаторы - имена типов
Aidar
спасибо за подвохи
Aidar
Алдар
🦥Alex Fails
Constantine
int g(int);
std::string h(int);
auto f = [](auto x(int)) { return x(0); };
f(&g);
f(&h);
как это вообще работает?
Aidar
как функтор с шаблоном думаю
Constantine
что такое f?
Aidar
функтор
Constantine
класс или переменная или что?
Aidar
объект анонимного класса
Aidar
у него стремный тип
Aidar
лучше его не знать
Constantine
а, я понял, у этого объекта же просто шаблонный operator()
Constantine
понял, втупил
Андрей
В supapro молчат
Андрей
Как в CMake подключить BLAS?
Андрей
На Linux
Андрей
Пытаюсь так
find_package(BLAS REQUIRED)
include_directories( ${BLAS_INCLUDE_DIRS})
target_link_libraries( EVM_M ${BLAS_LIBRARY})
Андрей
пишет CMake Error at CMakeLists.txt:8 (target_link_libraries):
Cannot specify link libraries for target "EVM_M" which is not built by this
project.
Anatoly
target EVM_M должен быть определен либо через add_executable, либо через add_library
Anatoly
а уже после слинкован с библиотекой посредством target_link_libraries
Александр
Есть вопрос к ненавистникам UB: http://cpp.sh/2rbzm внутри main()
Stas
Можно вопрос от новичка (прошу простить), можно же Base(void* c=nullptr) : context(c) {} - он и конструктор по умолчанию и с параметром - сразу двух зайцев не?
Александр
Stas
Derived(double a) : Derived (a, nullptr) {// используем context, a } Это не подходит почему? еще раз простите.
Александр
Потому что контекст будет nullptr, если попытаться его использовать
Stas
Хм, ладно я не вкурил. просто обе фабрики принимают указатель на context, зачем что-то упрощать.
Александр
Фабрика и Base будут интерфейсом либы, а вот Derived создаёт пользователь. И не круто каждый раз пилить конструктор очередного Derived с дополнительным аргументом void*. Для этого я придумал вторую фабрику и спрашиваю - насколько правильно её использовать
Александр
Constantine
почему нельзя отказаться от наследования?
Constantine
Derived используется по указателю, разве не сработает агрегация с перегрузкой -> ?
Constantine
вроде нет, можно же теперь просто протолкать параметром бывший Base*
Constantine
ой
Александр
Параметром чего? Конструктора?) Я от этого и избавляюсь
Constantine
инициализовать после конструктора, например
Constantine
в make_derived_2
Александр
Вооот, от этого я и пришёл. Контекст требуется уже внутри конструктора Derived, поэтому после - не получится
Constantine
хм...
Constantine
в любом случае меня учили в книжках, что агрегация уменьшает связность
Constantine
а зачем вообще нужен второй конструктор?
Constantine
он же может быть использован только в make_derived_2
Александр
Там в примере показаны две ситуации - нормальная, но не очень удобная и та, которую я хочу
Александр
В идеале нужно удалить конструктор Derived, который использует void*
Александр
Ну его сейчас можно удалить и юзать вторую фабрику. Собственно вопрос в том, законно ли это