Yura
ребят, а в дефайне можно принять несколько аргументов как бы?
Yura
например у меня есть #define cout(x) cout«x
Yura
а мне нужно сделать, чтобы не только 1 аргумент как бы дефайнился а например не более 10
Yura
чтобы было что-то типа #define cout(x,y,z) cout«x«y«z
Oleg
define cout(x) define cout(x, y) ...
Igor
define cout(x) define cout(x, y) ...
не взлетит, второе затрёт первое
Oleg
Есть гнусное расширение: http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html Там пишут, что планируется в стандарте в 2a.
Oleg
чтобы было что-то типа #define cout(x,y,z) cout«x«y«z
лучше вообще не используй макросы, если пишешь на плюсах
Yura
да мне просто надо исправить кусок чужого кода и мне надо привести к нужному типу... а ручками плохо
Yura
#define c(x) reinterpret_cast<const unsigned char*😠x) namespace dicts // { const unsigned char* buttons[20] = { c("next"),c("install"),c("finish"),c("yes"),c("принять"),"установить","далее","готово","запустить","да"}; const unsigned char* optionalbox[20] = { c("согласен"), c("принять"),c("да"), c("ясогласен"), c("agree"),c("iagree")}; };
Yura
пришлось это с() писать везде
Ignat
например у меня есть #define cout(x) cout«x
очень надеюсь, что это выдуманный пример
Ignat
ну это же треш какой-то :/
Anatoly
почему?
потому что уже есть variadic templates
Oleg
у меня пока еще даже std::shared_ptr нет
PRoSToC0der
увидел на cppreference такую запись: expr1 [ { expr, ... } ] как и для чего её можно использовать? http://en.cppreference.com/w/cpp/language/operator_member_access#Built-in_subscript_operator
PRoSToC0der
только для std::initializer_list и вызова implicit конструктора или ещё для чего-то можно?
Aidar
Там же написано
Aidar
Чо значит еще
Aidar
В языке с этими скобками можно делать что-то ещё?
PRoSToC0der
ну мало ли
Oleg
плохо
не представляешь как
Matwey
struct X { Z operator[](std::initializer_list<int>); }; только для перегруженного оператора
Ого, это что? Можно сделать нормальное индексирование тензоров?
Matwey
x[{i,j,k}]
Andrew
Зачем это, кстати, если то же самое можно сделать через operator[](T args), где у T конструктор от (int i, int j, ...), и тогда компилятор сам угадает {i,j,k}->T{i,j,k}? Пока в голову идет только разрешение неопределенности, когда есть operator[](T1) и operator[](T2).
Yura
а не знаете как сделать так, чтобы не открывалось консольное окошкоо вообще
Yura
чтоб не появилось и быстро исчезло, а чтоб вообще не открывалось
Andrew
Не открывать его? ;-)
Andrew
Если ты про Qt под винду, то надо какую-то настройку выкрутить. В свое время изи гуглилось.
Igor
а если про VS, то сменить в настройках проекта Linker -> Subsystem с Console на Windows, правда по-моему это сопряжено с мутацией main() в WinMain()
Andy
Добрый вечер есть std::string в котором двубайтный юникод - json с названиями и коментами сайтов на разных языках как преобразовать в другой std::string или std::wstring в котором будет уже utf8 тип первого менять нельзя - так приходит с внешней dll она в нем возвращает любые данные бинарные, в данном случае это юникод с 2 байтами на символ вот пример U+007B { U+0022 " U+0411 Б U+0443 у
Constantine
в данном случае непонятно, как оно попало в string
Andy
получено с leveldb базы данных она хранит что угодно в своих полях и именно std::string использует для обмена
Andy
как я вижу все английские символы и все что в нижней части таблицы записаны как два байта - 0 и код символа а русские например точно как в Windows-1251
Andy
там могла быть и картинка внутри string и mp3 файл что угодно :) любая последовательность байтов включая 00
Andy
https://ru.wikipedia.org/wiki/Windows-1251
Andy
Б 411
Andy
2 байта именно так как 04 11 и в моем случае выглядит буква Б
Andy
с русскими я бы и сам что то сделал но могут быть и другие языки
Constantine
Ну технически можно просто взять и reinterpret-cast ить
Constantine
Такой буфер
Matwey
Utf8
Constantine
Потому что речь идет о передаче utf16 строки в качестве std::string что очень странно
Matwey
Не похож...
Andy
ну там универсальное хранилище чего угодно авторы выбрали string
Constantine
вместо vector<byte> :(
Nikita
или хотя бы vector<char>
Constantine
byte это unsigned char
Constantine
подразумевается
Andy
гугл придумал :) leveldb в хромиуме в такой базе хранятся настройки расширений
Constantine
ну можно у них и спросить как они utf16 строки достают из std::string ^)
Nikita
подразумевается
по стандарту
Andy
именно меня интересовало расширение OneTab хотел чтобы автоматически сохранялся список внешней утилиткой неожиданно столкнулся с проблемами я вообще то шарпист и трудно в с++ что то делать а библиотека под шарп не заработала передать в шарп со своей длл тоже не выходит пока только могу сохранить сырые данные в файл пока
Constantine
по стандарту
по стандарту std::byte это отдельный тип)
Sergey
http://www.cplusplus.com/reference/codecvt/codecvt_utf8_utf16/
Constantine
http://www.cplusplus.com/reference/codecvt/codecvt_utf8_utf16/
да, я уже читал, интересно, как utf16 ковертировать в utf16 этой штукой :)
Anonymous
Вопрос знатокам стандарта: передача памяти, выделенной через std::allocator в std::unique_ptr. Я уверен что это UB, но не могу найти в стандарте упоминания. Может кто ткнуть в нужное место?
Anonymous
Речь про дефолтный std::unique_ptr. С делитером там любые извращения доступны, это понятно
Matwey
тогда это будет crash
не обязательно. может быть std::allocator под капотом делает new/delete
Anonymous
Тут, скорее, вопрос в том, можно ли звать delete[] или delete для указателя, который через std::allocator::allocate вернули
Matwey
Я думаю должен быть раздел где написано, что то что вернул allocate нужно класть в deallocate
Anonymous
А вот теперь я ищу ссылку на стандарт, где сказано, что нельзя...
Anatoly
не обязательно. может быть std::allocator под капотом делает new/delete
какая разница? ну при освобождении в аллокаторе крешанется
Ignat
Ну delete можно звать от того, что получено через new, или на худой конец от нулла
Matwey
какая разница? ну при освобождении в аллокаторе крешанется
allocator же не обязан запоминать всё, что выделил
Anonymous
Ага, а где сказано, что std::allocate не использует new или что это implementation specific?
Matwey
нигде не сказано
Anatoly
allocator же не обязан запоминать всё, что выделил
ты же привел пример что allocator выделил через new, deletetor unique_ptr вызовет delete, а аллокатор крешанет. контракт нарушен