
Alexander
20.06.2017
17:44:23
и система плагинов радует

Владислав
20.06.2017
17:44:38
Вим — фигня, сублайм — параша. Имакс, вперёд, победа наша!

Berkus
20.06.2017
17:44:49

Google

Group Butler [beta]
20.06.2017
17:44:49

Alexander
20.06.2017
17:44:57

Владислав
20.06.2017
17:45:13
ща только ноготь доем

Berkus
20.06.2017
17:45:39

Владислав
20.06.2017
17:46:18
эх, вот помню писал в универе lr/ll парсеры для лиспа на лиспе, хорошее время было

Antony
20.06.2017
17:46:22

Constantine
20.06.2017
17:47:40

Antony
20.06.2017
17:50:24

Constantine
20.06.2017
17:51:31
с захватом

Antony
20.06.2017
17:53:55
у нее нет имени, а значит нет linkage
а раз она с захватом, то нет ещё и оператора преобразрвания к указателю на функцию c С++ linkage
тоесть нарушений ODR быть не должно

Constantine
20.06.2017
17:54:37
само по себе, например, инстанцирование разных шаблонных подстановок при одинаковых шаблонных параметрах не является нарушением ODR?

Роман
20.06.2017
17:54:51

Google

Antony
20.06.2017
17:58:38

Constantine
20.06.2017
17:59:47
мне бы пример...
Тот же самый. Возврат осуществляется как std::function, в данном случае используется ее шаблонный конструктор (причем параметром шаблона будет тип лямбда-выражения)
template <typename T> inline std::function<void()> f(T * object) { return [object](){}; }

Antony
20.06.2017
18:05:55
на мой взгляд всё ОК со стороны стандарта

Constantine
20.06.2017
18:06:46
ладно, чиркну тогда завтра feedback to microsoft

Roman
20.06.2017
18:16:35
хмм, имею две функции которые принимают анонимные функции разного типа:
typedef QSharedPointer<Stream> Reference;
typedef std::function<Reference ()> FunctionS;
typedef std::function<void ()> FunctionV;
Stream::attach(FunctionS function);
Stream::attach(FunctionV function);
к сожалению не работает, компилятор ругается:
C2668 'Stream::attach': ambigious call to overloaded function
не могу понять как разрешить ситуацию, подскажет кто?

Alexander
20.06.2017
18:17:54
а строку вызова покажи плиз

Roman
20.06.2017
18:19:00
stream->attach([this, transaction, chunkSize]() {
return write(
transaction->fileId,
transaction->uploadProgress,
chunkSize
);
})
write() возвращает Reference (QSharedPointer<Stream>)

Berkus
20.06.2017
18:24:08
stream->attach([this, transaction, chunkSize]() -> Reference {
а так?

Roman
20.06.2017
18:25:29

Arseny
20.06.2017
18:35:23

Surreal
20.06.2017
18:39:06

Roman
20.06.2017
18:39:40
C2668: ambigious call to overloaded function
по прежнему

Arseny
20.06.2017
18:42:17
https://stackoverflow.com/questions/22146749/overload-resolution-with-stdfunction
Если коротко, то std::function разрешается "отбросить" возвращаемый тип.
И обе функции можно сконвертировать в std::fuction<void()>

Александр
20.06.2017
18:45:27
только там не возвращаемый, а принимаемый, не?

Roman
20.06.2017
18:46:00
т.е. эта пропблема решена в C++14 ?

Arseny
20.06.2017
18:46:31
Это не проблема, это фича.

Surreal
20.06.2017
18:46:58

Arseny
20.06.2017
18:48:24
В C++14 хотя бы гарантируется SFINAE при конвертации в std::function

Google

Александр
20.06.2017
18:48:34

Arseny
20.06.2017
18:50:35
я про ссылку на SO. там std::function<void()> и std::function<void(int)>
Note that there's been a slight change to the wording above, due to LWG 2420: There's an exception that if the return type R of a std::function<R(ArgTypes...)> is void, then any return type is accepted (and discarded) for the Callable in the constructor template mentioned above. For example, both []() -> void {} and []() -> bool {} are Callable for std::function<void()>

Surreal
20.06.2017
18:50:36

Roman
20.06.2017
18:51:08
хммм, я немного растерян этим немалым потоком инфы, в данном случае я пытаюсь упростить интерфейс библиотеки чтоб не приходилось писать:
->attach([](
const StreamHandle& handle,
const QVariant& data,
) {
Q_UNUSED(stream)
Q_UNUSED(data)
// ...
return nullptr;
})
а можно бы было просто:
->attach([]() {
// ...
})
это вообще, в таком случае, возможно?

Arseny
20.06.2017
18:52:26
Не возвращайте void
Возвращайте, допустим, struct Unit{};

Surreal
20.06.2017
18:53:03

Anatoly
20.06.2017
18:53:17
да можно оставить и Reference и возвращать nullptr
без перегрузки attach

Arseny
20.06.2017
18:54:49

Anatoly
20.06.2017
18:54:59
в сущности перегрузка с void это всего лишь сахар

Surreal
20.06.2017
18:56:56

Anatoly
20.06.2017
18:58:11
в любом случае, результат выполнения функция не учавствует в процессе разрешения перегрузки
int boo() {return 0;}
void boo() {}
не скомпилируется
отсюда и std::function ведет себя подобным образом

Stanislav
20.06.2017
18:59:43

Roman
20.06.2017
19:00:06
короче нельзя перегрузить attach разными типами ламбды
придётся тогда nullptr возвращать по старинке

Anatoly
20.06.2017
19:00:44
можно, если будут разные сигнатуры

Google

Roman
20.06.2017
19:01:09

Anatoly
20.06.2017
19:01:33
ну, если они будут отличатся числом или типом параметров

Arseny
20.06.2017
19:03:26

Roman
20.06.2017
19:04:18

Anatoly
20.06.2017
19:04:42
можно

Roman
20.06.2017
19:05:37
можно
ну так иначе же хрень будет с resolving'ом?

Arseny
20.06.2017
19:05:44
std::function<void(void)> x = []{return std::string();};
компилируется. В этом проблема

Admin
ERROR: S client not available

Anatoly
20.06.2017
19:06:32
можно, если нет перегрузки с таким же типом и числом аргументов, но отличающейся типом результата

Grigor
20.06.2017
19:13:30

Berkus
20.06.2017
19:13:53

Grigor
20.06.2017
19:14:32
лол, очевидно же

Anatoly
20.06.2017
19:15:16

Arseny
20.06.2017
19:16:44

Alan
20.06.2017
19:18:00
хай. соре за нубский вопрос. Скажите, плз, какую версию С++ желательно учить? по какой больше материала? начал учить питон, такое чувство что превращаешься в зомби-кодера, без понимания что как работает

Alexander
20.06.2017
19:18:28
самый сок

Surreal
20.06.2017
19:18:56

Anatoly
20.06.2017
19:19:19

Google

Vladislav
20.06.2017
19:19:25

Aldar
20.06.2017
19:19:31

Group Butler [beta]
20.06.2017
19:19:31

Alan
20.06.2017
19:20:34
лан.

Alexander
20.06.2017
19:20:45

Matway
20.06.2017
19:39:43
Сижу, переписываю красивый код с std::variant обратно на switch. std::variant не просто тормозит, а ужасно тормозит. В ассемблере полная каша. На MSVC variant замедляет мой код на 70%, на Clang - 30%.
Разумеется, -O3

Stanislav
20.06.2017
19:40:25

Matway
20.06.2017
19:40:50
Вот так вот программист не должен платить за абстракции, ага.

Anatoly
20.06.2017
19:41:27
а код не под управлением чего-то гитоподобного?
откатится нельзя?

Matway
20.06.2017
19:42:08
Гит, да. Куда откатиться?

Anatoly
20.06.2017
19:42:30
или ты с нуля написал и теперь отказался, сорри не понял

Matway
20.06.2017
19:43:04
Мы месяца четыре назад с радостным улюлюканьем перебежали на std::variant. А вот сегодня я засел профайлить.

Anatoly
20.06.2017
19:43:24
а профилировщик на что показывает? какие места проседают? я бы попробовал, если у тебя есть синтетический тест

Matway
20.06.2017
19:43:58
Собственно, во внутренности variant и показывает.

Vladislav
20.06.2017
19:44:15

Matway
20.06.2017
19:44:38
В моём понимании, эта штука должна полностью уйти в процессе оптимизации. Ан нет. Попытался почитать ассемблер - там кошмар.