@ProCxx

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

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

Google
Group Butler [beta]
20.06.2017
17:44:49
Вим — фигня, сублайм — параша. Имакс, вперёд, победа наша!
С таким заявлением вам лучше сюда: pro.cxx.holywars

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 парсеры для лиспа на лиспе, хорошее время было

Constantine
20.06.2017
17:47:40
Догадок лучше у меня нет :) Можно завтести тикет и смотреть что скажут разработчики VS
Я правильно понимаю, что вы считаете, что код, содержащий преобразование лямбды с захватом шаблонных параметров функции, соответствует действующему стандарту C++ и это не недоработка стандарта? :)

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
1к сообщений за день?
Хорошо, что не за минуту

Google
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
stream->attach([this, transaction, chunkSize]() -> Reference { а так?
оу, долгое время работаю с ламбдой, первый раз вижу подобную конструкцию, круто, снова что-то выучил, спасибо!

Surreal
20.06.2017
18:39:06
оу, долгое время работаю с ламбдой, первый раз вижу подобную конструкцию, круто, снова что-то выучил, спасибо!
Такое еще с функциями, возвращающими auto, работает. Особенно в 11 стандарте, где еще не было дедакшена.

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
Возвращаемый std::function<Reference ()>
я про ссылку на SO. там std::function<void()> и std::function<void(int)>

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
я про ссылку на SO. там std::function<void()> и std::function<void(int)>
А, это да. Но там в комменте и про возвращаемый есть: void foo(std::function<void()>); void foo(std::function<bool()>); foo([]() -> bool {}); // ambiguous

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
А если возвращать struct Unit : {int a[0];}?
Важно, чтобы Stream::attach(std::function<Unit()> function); а не Stream::attach(std::function<void()> function);

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

Surreal
20.06.2017
18:56:56
Важно, чтобы Stream::attach(std::function<Unit()> function); а не Stream::attach(std::function<void()> function);
Надо потестить, будет ли оно нормально работать. У меня как-то были траблы с зеросайзед объектами.

Anatoly
20.06.2017
18:58:11
в любом случае, результат выполнения функция не учавствует в процессе разрешения перегрузки

int boo() {return 0;} void boo() {}

не скомпилируется

отсюда и std::function ведет себя подобным образом

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
отсюда и std::function ведет себя подобным образом
Но std::function при конвертации учитывает возвращаемое значение. Спецэффект именно с void.

Roman
20.06.2017
19:04:18
Но std::function при конвертации учитывает возвращаемое значение. Спецэффект именно с void.
короче нельзя из ламбды void возвращать, правильно я понял?

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
можно, если нет перегрузки с таким же типом и числом аргументов, но отличающейся типом результата

Berkus
20.06.2017
19:13:53
а в чем здесь проблема?
в том что стринг ты не получишь

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

Anatoly
20.06.2017
19:15:16
std::function<void(void)> x = []{return std::string();}; компилируется. В этом проблема
2 A callable object f of type F is Callable for argument types ArgTypes and return type R if the expression INVOKE (f, declval<ArgTypes?)..., R), considered as an unevaluated operand (Clause 5), is well formed (20.9.2).

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

Anatoly
20.06.2017
19:19:19
Тьфу. То есть на http://cplusplus.github.io/LWG/lwg-defects.html#2420
почему же? просто не знал, спасибо!

Google
Alan
20.06.2017
19:20:34
лан.

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

Разумеется, -O3

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 и показывает.

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

А он у тебя прямо в critical path используется?
Остальной код писан осторожно, каждый лишний if на счету. Вот на фоне кода, который писался с производительностью в уме, variant и "заиграл". В обычном коде думаю не было бы так критично.

Страница 988 из 2477