MSVC: va_start with std::string
От: пффф  
Дата: 20.07.23 22:33
Оценка: -1 :))) :)
Привет

Новые, чудные для меня открытия с опцией /Wall

template<>
std::string format_print<std::string>( const std::string fmt, ...)
{
    //...
    va_list args;
    va_start(args, fmt);
    //...
}


Выдает
warning C4840: non-portable use of class std::basic_string<...> as an argument to a variadic function
message: std::basic_string<...> is non-trivial


Ну, я знаю, что нон-тривиал. И что мне теперь делать?

UPD Там есть еще дополнение
message: the constuctor and destructor will not be called; a bitwise copy of the class will be passed as the argument


Ну, если конструкторы и деструкторы не вызываются, то по идее, ничего страшного от побитового копирования не должно произойти. Ну и оно работает. Может, просто отключить этот варнинг?
Отредактировано 20.07.2023 22:52 пффф . Предыдущая версия .
Re: MSVC: va_start with std::string
От: kov_serg Россия  
Дата: 20.07.23 22:47
Оценка:
Здравствуйте, пффф, Вы писали:

П>Ну, я знаю, что нон-тривиал. И что мне теперь делать?

& добавь
std::string format_print<std::string>( const std::string &fmt, ...)
Re[2]: MSVC: va_start with std::string
От: пффф  
Дата: 20.07.23 22:49
Оценка:
Здравствуйте, kov_serg, Вы писали:

П>>Ну, я знаю, что нон-тривиал. И что мне теперь делать?

_>& добавь
_>
_>std::string format_print<std::string>( const std::string &fmt, ...)
_>


Пробовал. Выдает ошибку, что ссылка не может быть использована с va_start или как-то так
Re[3]: MSVC: va_start with std::string
От: kov_serg Россия  
Дата: 20.07.23 23:15
Оценка:
Здравствуйте, пффф, Вы писали:

П>Пробовал. Выдает ошибку, что ссылка не может быть использована с va_start или как-то так

точно этож c++. тогда так
std::string format_print_0<std::string>(const std::string *fmt, ...);

tempalte<class... T> std::string format_print<std::string>(const std::string &fmt,T... t) { return format_print_0(&fmt,t...); }
Отредактировано 20.07.2023 23:24 kov_serg . Предыдущая версия .
Re[4]: MSVC: va_start with std::string
От: пффф  
Дата: 20.07.23 23:17
Оценка: 1 (1)
Здравствуйте, kov_serg, Вы писали:

П>>Пробовал. Выдает ошибку, что ссылка не может быть использована с va_start или как-то так

_>точно этож c++. тогда так
_>
_>std::string format_print<std::string>(const std::string *fmt, ...);
_>


Выглядит, как дерьмо
Re[5]: MSVC: va_start with std::string
От: kov_serg Россия  
Дата: 20.07.23 23:25
Оценка: +1
Здравствуйте, пффф, Вы писали:

П>Выглядит, как дерьмо

На вкус и цвет фломастеры разные. Есть же vardic templates
Re[6]: MSVC: va_start with std::string
От: пффф  
Дата: 20.07.23 23:30
Оценка:
Здравствуйте, kov_serg, Вы писали:

П>>Выглядит, как дерьмо

_>На вкус и цвет фломастеры разные. Есть же vardic templates

На них можно сделать малой кровью так, чтобы было совместимо по формату с printf? У меня идея была такая, сделать свой printf на базе sprintf, который принимал бы std::basic_string<>.
Да и это ещё из старого кода растет, даже до 11ых, не уверен, что всё гладко пойдёт при переезде
Re[7]: MSVC: va_start with std::string
От: kov_serg Россия  
Дата: 20.07.23 23:46
Оценка:
Здравствуйте, пффф, Вы писали:

П>На них можно сделать малой кровью так, чтобы было совместимо по формату с printf? У меня идея была такая, сделать свой printf на базе sprintf, который принимал бы std::basic_string<>.

А нафига?
П>Да и это ещё из старого кода растет, даже до 11ых, не уверен, что всё гладко пойдёт при переезде
std::string format_print_0<std::string>(const std::string *fmt, ...);
tempalte<class... T> std::string format_print<std::string>(const std::string &fmt,T... t) { return format_print_0(&fmt,t...); }
Re: MSVC: va_start with std::string
От: CreatorCray  
Дата: 21.07.23 00:16
Оценка: 1 (1) +4
Здравствуйте, пффф, Вы писали:

А нафига тебе заморачиваться с сишным va_arg когда есть С++ные variadic templates?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: MSVC: va_start with std::string
От: CreatorCray  
Дата: 21.07.23 00:20
Оценка:
Здравствуйте, пффф, Вы писали:

П>На них можно сделать малой кровью так, чтобы было совместимо по формату с printf?

Конечно! Более того, как только они появились я на них свой аналог printf переписал, который и работает быстрее и завалить его неправильным аргументом (например передать double в %s) невозможно в принципе. До вариадиков приходилось опуститься до переопределения оператора запятая, вариадики же позволили сделать код в разы лучше и чище.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: MSVC: va_start with std::string
От: пффф  
Дата: 21.07.23 06:55
Оценка:
Здравствуйте, CreatorCray, Вы писали:

П>>На них можно сделать малой кровью так, чтобы было совместимо по формату с printf?

CC>Конечно! Более того, как только они появились я на них свой аналог printf переписал, который и работает быстрее и завалить его неправильным аргументом (например передать double в %s) невозможно в принципе. До вариадиков приходилось опуститься до переопределения оператора запятая, вариадики же позволили сделать код в разы лучше и чище.

Ну похвастайся скорее, как выглядит твоя реализация на вариадиках, чтобы я мог её стырить
Re[9]: MSVC: va_start with std::string
От: ArtDenis Россия  
Дата: 21.07.23 07:46
Оценка:
Здравствуйте, пффф, Вы писали:

П>Ну похвастайся скорее, как выглядит твоя реализация на вариадиках, чтобы я мог её стырить


У меня есть простой вариант: https://github.com/art-den/micro_format для микроконтроллеров без constecxpr-магии. Но там синтаксис аргументов как у std::format, а не printf
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[10]: MSVC: va_start with std::string
От: пффф  
Дата: 21.07.23 07:56
Оценка:
Здравствуйте, ArtDenis, Вы писали:


П>>Ну похвастайся скорее, как выглядит твоя реализация на вариадиках, чтобы я мог её стырить


AD>У меня есть простой вариант: https://github.com/art-den/micro_format для микроконтроллеров без constecxpr-магии. Но там синтаксис аргументов как у std::format, а не printf


Спасибо, посмотрю. Но сейчас мне нужна ещё и совместимость с кучей моего уже имеющегося кода
Re[11]: MSVC: va_start with std::string
От: ArtDenis Россия  
Дата: 21.07.23 08:19
Оценка:
Здравствуйте, пффф, Вы писали:

П>Спасибо, посмотрю. Но сейчас мне нужна ещё и совместимость с кучей моего уже имеющегося кода


Думаю, на гитхабе можно найти и printf на вариадиках, если тебе важно сохранение старого синтаксиса описания аргументов
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.