
Anatoly
13.07.2017
09:05:10
напишешь std::function<int(CStringA)>
получишь по рукам
так что это над тобой CStringA поиздевался

Constantine
13.07.2017
09:06:05
а по-моему std::function<void()> это должно быть хотя быть что-то, что могло быть скомпилировано, возвращая void

Google

Scarf
13.07.2017
09:06:12
Т.е. у тебя выходит CStringA operator() { return savedlambda(); };

Constantine
13.07.2017
09:06:50
std::function<void()> lambda1 = [&] () { //OK
return lambda1;
};
std::function<void()> lambda2 = [&] () -> void { //CE
return lambda2;
};

Scarf
13.07.2017
09:08:28
Ну и? Здесь тоже все норм.
В первом случае при возвращении значение кастится в void, во втором случае ты пытаешься вернуть значение из функции с void.

Constantine
13.07.2017
09:08:58
Ну то есть вы не считаете, что такое поведение является by design ошибкой для std::function? :)

Berkus
13.07.2017
09:09:19
чот я не понял с какого хуя вам там преобразование то вдруг впилось? тернарка возвращает ОДИН тип и это CStringA

Anatoly
13.07.2017
09:09:45
тернарка возвращает const char*
во всяком случае в таком виде return s == "" ? "" : s;

Constantine
13.07.2017
09:10:22

Scarf
13.07.2017
09:10:54

Constantine
13.07.2017
09:11:12
std::function<CStringA(CStringA)> echo = [](CStringA s) -> CStringA { //было бы верно
return s == "" ? "" : s;
}

Anatoly
13.07.2017
09:12:43
тебя подвел их конструктор CStringT(_In_opt_z_ const XCHAR* pszSrc) :

Constantine
13.07.2017
09:13:29
ну смотрите, я жду от std::function поведения, которое соответствует поведению указателей на функции
по сути std::function построила новую функцию, добавив мне оператор преобразования в конец

Google

Anatoly
13.07.2017
09:15:20
просто вывод типа в условиях неопределенности сопровождается сюрпризами из-за вольностей позволяемых тем же CStringA
c std::string у тебя такого не будет

Constantine
13.07.2017
09:16:39
все в порядке, пока речь не идет о выражениях, допускающих преобразование типа и при этом выходящих за scope
как ни странно, но до этого момента этими вольностями CStringA расстрелов ноги не было
там очень сложно ее построить
auto p = (s == "" ? "" : s); //вывело LPCTSTR из s, которая все еще верна в scope

Vladislav
13.07.2017
09:21:21

Constantine
13.07.2017
09:21:57

Anatoly
13.07.2017
09:22:01
наоборот, он сделал все что мог

Vladislav
13.07.2017
09:22:17

Constantine
13.07.2017
09:22:42
короче я это все запретил и у меня никаких проблем :)

Anatoly
13.07.2017
09:22:45
ладно, пусть функция возвращает CStringA, ты мне вернул const char*, ладно, ведь CStringA может же из него сконструировать

Vladislav
13.07.2017
09:22:57

Constantine
13.07.2017
09:23:06
я в принципе не понимаю, зачем std::function допускает преобразование возвращаемых типов

Alex Фэils?︙
13.07.2017
09:23:39
Затем

Anatoly
13.07.2017
09:23:46
думаю, в комитете были дебаты на этот счет

Alex Фэils?︙
13.07.2017
09:24:07
Затем
Я заебался вчера об этом говорить, зачем. Даже Андрея потревожил

Constantine
13.07.2017
09:24:12
всей армии возмуженных можно было сделать std::allow_implicit_cast

Anatoly
13.07.2017
09:24:22
сделать тупую куклу или сделать интеллектуальный аппарат std::function

Vladislav
13.07.2017
09:24:46

Google

Anatoly
13.07.2017
09:25:07
ну, так или иначе, интеллект перевесил
ага, и лаконичности конец
в конечном итоге, за это идет сейчас борьба

Constantine
13.07.2017
09:26:07
> интеллектуальный аппарат
что-то я не помню, какие там маркировки у std::shared_ptr<T>::shared_ptr(T*)
это создает 0 лаконичности

Anatoly
13.07.2017
09:26:44
make_shared

Constantine
13.07.2017
09:26:45
если принимается void() и туда передается int() кажется здесь какой-то костыль

Vladislav
13.07.2017
09:26:52

Alex Фэils?︙
13.07.2017
09:26:53
В общем, можно пропознуть explicit templatea

Vladislav
13.07.2017
09:28:05
Это же цэ(
Ну вот решение о касте возврата в std::function - оно в стиле цэ
Жертвуем строгостью в пользу сомнительного упрощения частного случая (не факт что часто нужного)

Berkus
13.07.2017
09:28:50

Anatoly
13.07.2017
09:29:25
ретурн валуе у std::function но не лябмды

Constantine
13.07.2017
09:29:38

Anatoly
13.07.2017
09:29:41
поэтому const char* уже указывает на мусор

Berkus
13.07.2017
09:29:56

Anatoly
13.07.2017
09:29:59
короче CStringA зло

Berkus
13.07.2017
09:30:11

Constantine
13.07.2017
09:30:19
ага

Google

Berkus
13.07.2017
09:30:26
но этот пример не характерен для ATL
любая либа с такими преобразованиями будет подвержена
зло тут implicit casts :)

Vladislav
13.07.2017
09:31:13

Anatoly
13.07.2017
09:31:20
ну, это и имелось ввиду

Alex Фэils?︙
13.07.2017
09:31:31
Видимо, по этой причине стд стринг не кастуется неявно к const char*

Admin
ERROR: S client not available

Anatoly
13.07.2017
09:31:37
сделай они CStringA(const char*) explicit все бы было хорошо

Berkus
13.07.2017
09:32:26
ага, спасибо, это было интересно

Alex Фэils?︙
13.07.2017
09:32:40

Berkus
13.07.2017
09:33:05
"хорошо" и "ATL в одном предложении, ай яй яй

Alex Фэils?︙
13.07.2017
09:33:50
Ну, про другие части атл я не говорил ¯\_(ツ)_/¯

Anatoly
13.07.2017
09:36:40
так что, расходимся, драки не будет?

Evgeniy
13.07.2017
09:43:34

Alex Фэils?︙
13.07.2017
09:44:28
Это похоже на то, как я одну функциональность в одном проекте во внешний плагин выносил
В итоге знатно отрефакторил код
Мой любимый рефакторинг: 6000 deletions, 0 additions

Alexander
13.07.2017
09:45:28
?
Офигенно поработал:)

Alex Фэils?︙
13.07.2017
09:45:48
Эт да)))

Google

Anatoly
13.07.2017
09:45:56
:)))

Antony
13.07.2017
09:47:41
Дратуйте, в сях я нуб, но тем не менее есть вопрос
vector<char> temp_vector;
pthread_create(&thread, NULL, flex, &temp_vector);
pthread_create(&thread2, NULL, draw, &temp_vector);
void * draw(void *arg) {
vector<char> *temp_vector = (vector<char> *) arg;
while (true) {
cout << temp_vector->size() << endl;
usleep(1000000);
}
}
void * flex(void *arg) {
vector<char> *temp_vector = (vector<char> *) arg;
...
...
вот кусочек говнеца, я ожидал что переменная temp_vector при модификации в функции flex, будет доступна в функции draw в модифицированном виде, но она пустая. Размерность вектора изменяется равномерно в функции flex, на старте вектор нулевого размера
У вас проблема в том, что вы работаете из нескольких потоков с одной переменной без мьютекса.
Работатйте с вектором только под мьютексом, и ваша проблема изчезнет

Anatoly
13.07.2017
09:49:01
@antoshkka а это валидное объявление другом
friend class ReflectionTypeImpl;
при условии, что ReflectionTypeImpl template?

Antony
13.07.2017
09:51:14

Alex Фэils?︙
13.07.2017
09:51:38
Там вроде typename надо еще вкрутить

Anatoly
13.07.2017
09:51:52
то есть template<typename T> friend class ReflectionTypeImpl
спасибо!

Vladislav
13.07.2017
09:54:28

Alex Фэils?︙
13.07.2017
10:06:34
24-26 августа в Томске на территории Томского государственного университета пройдёт конференция C++ Siberia 2017. Нулевой день конференции (24 августа) отведен для мастер-классов. В первый день (25 августа) состоится
регистрация участников и открытие конференции.
http://siberia-2017.cppconf.ru/
#cppsiberia #cpp #tomsk

Vladislav
13.07.2017
10:07:09


Vadym
13.07.2017
10:49:51
Добрый день.
Помогите разобраться, пожалуйста, с организацией файлов проекта.
Создал file.cpp, создал file.h. тут всё ок, компилятор сразу привязывать описание из header в cpp.
В этом же проекте создаю file2.cpp и file2.h
И всё, что описываю в этом новом header я почему-то не могу связать с новым .срр.
Я вручную пробовал, всё равно не получается. Будто бы file2.cpp полностью игнорирует и не видит #include "file2.h" .
Поискал решение в интернете, скорее всего это связано с файлами проекта, надо полазить в настройках проекта и в Additional Include Directories вручную указать путь. Я начал лазить, но не смог настроить. И не уверен на 100%, что это именно решение проблемы.
Если кто сталкивался с таким - отпишите, спасибо.


Владислав
13.07.2017
10:59:47
Добрый день.
Помогите разобраться, пожалуйста, с организацией файлов проекта.
Создал file.cpp, создал file.h. тут всё ок, компилятор сразу привязывать описание из header в cpp.
В этом же проекте создаю file2.cpp и file2.h
И всё, что описываю в этом новом header я почему-то не могу связать с новым .срр.
Я вручную пробовал, всё равно не получается. Будто бы file2.cpp полностью игнорирует и не видит #include "file2.h" .
Поискал решение в интернете, скорее всего это связано с файлами проекта, надо полазить в настройках проекта и в Additional Include Directories вручную указать путь. Я начал лазить, но не смог настроить. И не уверен на 100%, что это именно решение проблемы.
Если кто сталкивался с таким - отпишите, спасибо.
#supapro


Group Butler [beta]
13.07.2017
10:59:47
Добрый день.
Помогите разобраться, пожалуйста, с организацией файлов проекта.
Создал file.cpp, создал file.h. тут всё ок, компилятор сразу привязывать описание из header в cpp.
В этом же проекте создаю file2.cpp и file2.h
И всё, что описываю в этом новом header я почему-то не могу связать с новым .срр.
Я вручную пробовал, всё равно не получается. Будто бы file2.cpp полностью игнорирует и не видит #include "file2.h" .
Поискал решение в интернете, скорее всего это связано с файлами проекта, надо полазить в настройках проекта и в Additional Include Directories вручную указать путь. Я начал лазить, но не смог настроить. И не уверен на 100%, что это именно решение проблемы.
Если кто сталкивался с таким - отпишите, спасибо.
Чат supapro.cxx: https://telegram.me/joinchat/BYlFbD3eN3JMaG34hyh96w

Vadym
13.07.2017
11:02:26
О, спасибо

Michael
13.07.2017
12:37:55
Может кто юзал pootle или weblate? Что удобнее и лучше?

Alexander
13.07.2017
12:47:52

Дед Пегас
13.07.2017
14:05:39
Не сколь про плюсы, но про ARM http://lemire.me/blog/2017/07/10/pruning-spaces-faster-on-arm-processors-with-vector-table-lookups/

Alexander
13.07.2017
14:07:02
на хабре вроде как перевод был