Size: a a a

2020 July 29

AD

Apache DOG™ in pro.cxx
std::pair
источник

AD

Apache DOG™ in pro.cxx
писать руки болят
источник

В

Владимир in pro.cxx
Apache DOG™
А вот ещё вопросик, какая принципиальная проблема в С++ мешает возвращать несколько результатов из функции?
Верни тюпл в чем проблема?
источник

АК

Александр Караев... in pro.cxx
Apache DOG™
писать руки болят
тогда можно сразу бросать C++
источник

AD

Apache DOG™ in pro.cxx
Александр Караев
тогда можно сразу бросать C++
Ну в прочем я так и сделал, слишком вербозно
источник

В

Владимир in pro.cxx
Apache DOG™
(int int) divide(int a, int b)
Все так просто?))) Я думал там возвращать последовательность функций))
источник

AD

Apache DOG™ in pro.cxx
Владимир
Все так просто?))) Я думал там возвращать последовательность функций))
F[T => U]
источник

ГH

Гласси Hudobin in pro.cxx
"Вы не понимаете, это другое".
источник

ПК

Побитый Кирпич... in pro.cxx
Apache DOG™
писать руки болят
А хочется?
источник

ИI

И Ivan in pro.cxx
Apache DOG™
А вот ещё вопросик, какая принципиальная проблема в С++ мешает возвращать несколько результатов из функции?
А в каком языке это сделано не через туплы?
источник

SE

Stanislav Ershov in pro.cxx
Apache DOG™
А вот ещё вопросик, какая принципиальная проблема в С++ мешает возвращать несколько результатов из функции?
возвращай тупл/структуру, в чем проблема?
источник

AS

Anatoly Shirokov in pro.cxx
Apache DOG™
А вот ещё вопросик, какая принципиальная проблема в С++ мешает возвращать несколько результатов из функции?
Чего хочется? Сахара?
источник

O

Ofee in pro.cxx
Во флудилке случайно родилась мысль. Иногда хочется иметь строгие тайп-алиасы.

Иногда нам даже нужна форвард-декларация инстанцирования какого-то очень сложного шаблонного класса, форвард декларация для которого потребует множество других форвард деклараций или даже определения какого-то класса, потому что в реальности используется вложенный в класс тип.

// our header

// На самом деле это какая-то
// сложная инстанция шаблона,
// для которой мы не можем  
// сделать форвард-декларацию
struct Foo;

std::shared_ptr<Foo> foo_ptr;

// our cpp file

// нужный нам шаблон
#include <foo>

struct Foo
   : libfoo::foo< libfoo::some_other_type
                , libfoo::some_class::nested>
{ using foo::foo; }

// Здесь мы можем свободно работать
// с foo_ptr как с libfoo::foo, например:

int main() {
   foo_ptr->bar();
}

А теперь проблема. Ключевое слово final. Лично я для себя его как попытку помочь компилятору соптимизировать наш код, однако, его наличие так же бонусом ломает и код выше.

Есть мысль: а что, если бы ключевое слово final не запрещало наследование от класса, а только запрещало только перегрузку виртуальных функций (и возможно, расширение класса?)?

Тогда компилятор смог бы продолжить так же успешно оптимизировать код, но при этом не ломал бы представленный пример кода, который бы мог быть крайне полезен/удобен

Есть ли ещё какие-то действительно полезные применения ключевого слова final? Может ли в реальном коде понадобиться предотвращение наследования для других целей?

Пока что @Malbu0698 предположил, что это может сломать SFINAE, сделав ранее невалидный код валидным и, возможно, у кого-то сломаются какие-то трейты

Может ли кто-то высказать своё мнение о предложении? Возможно, кто-то увидит ещё какие-то подводные камни здесь?

По сути, это расширение существующего механизма, чтобы позволить делать строгие тайп-алиасы без какого-то нового синтаксиса
источник

R

Ruben in pro.cxx
Можно ли как-то создать в векторе объект с удалёнными copy и move конструкторами?
источник

R

Ruben in pro.cxx
emplace_back требует move конструктор
источник

O

Ofee in pro.cxx
Ruben
Можно ли как-то создать в векторе объект с удалёнными copy и move конструкторами?
А зачем и как это может быть использовано?
источник

DP

Denis Paukaev in pro.cxx
Ruben
Можно ли как-то создать в векторе объект с удалёнными copy и move конструкторами?
не понятно как при расширении вектор должен это всё мувать | копировать
источник

ПК

Побитый Кирпич... in pro.cxx
Ruben
Можно ли как-то создать в векторе объект с удалёнными copy и move конструкторами?
Можно:
vec.push_back(std::make_unique<std::mutex>());
источник

S

Sasha in pro.cxx
Побитый Кирпич
Можно:
vec.push_back(std::make_unique<std::mutex>());
Тут есть move конструктор
источник

R

Ruben in pro.cxx
Есть класс, в котором запрещено и то и то по причине наличия коллбеков на него из других классов, содержащих указатель
источник