Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
ДЕСАНТУРА
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 179
1

Вывод значения переменной через stringstream

25.07.2015, 11:16. Просмотров 456. Ответов 11
Метки нет (Все метки)

Очень хотелось бы реализовать через stringstream вывод значения переменной, код отказывается работать, можно ли что-то сделать в данной ситуации, конечно легче всего это реализовать через sprintf и va_list, но хотелось бы именно через stringstream;

C++
1
2
3
4
5
6
7
8
9
template<typename ...variable>
BOOL write(variable ...value)
{
    stringstream ss;
 
    ss << value;
    
    printf(ss);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2015, 11:16
Ответы с готовыми решениями:

Вывод значения ячейки массива через TextOut
Как через TextOut вывести значение ячейки массива? На код типа TextOut (hdc,...

Конструирование string из stringstream
Я уже довольно долгое время ломаю голову над вот таким вопросом конструирования...

Получение значения переменной в Dll
Добрый день, как можно задавать и получать значение переменной которая описана...

Неправильная передача значения переменной
Еще раз здравствуйте. Возникла такая проблема: при открытии файла с помощью...

Запрещение изменения значения переменной
Здравствуйте Уважаемые форумчане... Создаю игру с помощью OpenGL, и возникла...

11
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
26.07.2015, 01:09 2
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
вывод значения переменной
вывод значения одной переменной? Тогда зачем Вам
C++
1
typename ...variable
variadic templates?

Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
printf(ss);
C++
1
printf( ss.str().c_str() ) ;
но нахрена тут printf?
0
ДЕСАНТУРА
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 179
26.07.2015, 08:55  [ТС] 3
Цитата Сообщение от Croessmah Посмотреть сообщение
вывод значения одной переменной? Тогда зачем Вам
Одна переменная отлично работает, я просто не верно сформулировал вопрос, мне нужно запихнуть лист переменных в стрингстрим, как в примере моего кода выше.

Добавлено через 55 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
но нахрена тут printf?
выводил в консоль для проверки, забыл удалить просто, этот кусок кода, вот и все.
0
shmkv
1207 / 430 / 59
Регистрация: 21.07.2015
Сообщений: 1,113
27.07.2015, 14:36 4
ДЕСАНТУРА, не надо лезть в дебри не зная основ.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <sstream>
 
template <typename T> void print(std::ostream& out, const T& t) 
{
    out << t;
}
 
template <typename First, typename... Rest> 
void print(std::ostream& out, const First &first, const Rest&... rest) 
{
    out << first;
    print(out, rest...);
}
 
int main()
{
   std::stringstream ss;
   print(ss, "hello", 123);
   std::cout << ss.str() << std::endl; 
   return 0;
}
1
ДЕСАНТУРА
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 179
27.07.2015, 21:55  [ТС] 5
можно использовать в виде буфера не ostream? код очень громоздкий и я не пойму почему если первый аргумент не вставить в буфер, то последующие не будут выводится вообще, либо выводятся но только один из списка аргументов самый последний?Я про эту строку:
C++
1
2
3
4
5
6
template <typename First, typename... Rest> 
void print(std::ostream& out, const First &first, const Rest&... rest) 
{
* * out << first;
* * print(out, rest...);
}
C++
1
out << first;
0
shmkv
1207 / 430 / 59
Регистрация: 21.07.2015
Сообщений: 1,113
27.07.2015, 23:43 6
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
можно использовать в виде буфера не ostream?
можно, но не понятно зачем.
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
код очень громоздкий и я не пойму почему если первый аргумент не вставить в буфер, то последующие не будут выводится вообще, либо выводятся но только один из списка аргументов самый последний?Я про эту строку:
Я попытаюсь объяснить поймешь или нет - не знаю. Суть в том, что мы рекурсивно раскрываем список аргументов. Первый из них при раскрытии попадает в first, а остаток списка в Rest. Когда остается 1 элемент в списке вызывается прототип первый прототип функции (без остатка).
0
ДЕСАНТУРА
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 179
27.07.2015, 23:59  [ТС] 7
Цитата Сообщение от shmkv Посмотреть сообщение
можно, но не понятно зачем.
Если использовать "sprinf", то в этой функции нужно прописывать какой тип переменной попадет в буфер:
C++
1
2
3
char buf[256];
int bla = 12345;
sprintf(bla,"%d", bla);
А стрингстрим автомаматом преобразует в нужный тип, то есть там не нужно прописывать "%d", "%s" и т.д и это удобнее "sprintf";
C++
1
2
3
stringsteam ss;
ss<<5;
ss<<"bla";
Но в стрингстрим нельзя засунуть лист значений, во что можно засунуть лист значений, может есть какие-то специальные буферы для этого?(приложение не консольное).
0
shmkv
1207 / 430 / 59
Регистрация: 21.07.2015
Сообщений: 1,113
28.07.2015, 00:18 8
ДЕСАНТУРА, чего ты пытаешься добиться в целом? Приведи пример, я скажу можно ли это сделать и если можно, то как.

Добавлено через 2 минуты
Зачем тебе засовывать в стрингстрим лист значений? variadic templates - это сущность этапа компиляции, а сишные списки значений - рантайм.
0
ДЕСАНТУРА
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 179
28.07.2015, 08:09  [ТС] 9
Цитата Сообщение от shmkv Посмотреть сообщение
чего ты пытаешься добиться в целом? Приведи пример, я скажу можно ли это сделать и если можно, то как.
Например, хочу вывести в консоль значение любой переменной, с помощью такой функции:
C++
1
2
3
DWORD test = 0x56568;
 
writeConsole(555, "Hello World", &test);
и в консоль выведется значения переменных;
Чтобы не писать вот так короче:
C++
1
writeConsole("%d\n%s\n%x", 555, "Hello World", &test);
0
shmkv
1207 / 430 / 59
Регистрация: 21.07.2015
Сообщений: 1,113
28.07.2015, 10:20 10
ДЕСАНТУРА, и в чем проблема? 90% твоей задачи я уже расписал. Добавил бы что-то вроде этого:
C
1
2
3
4
5
6
template <typename... Tv> void print_ss(const Tv&... tv)
{
    std::stringstream ss;
    print(ss, tv...);
    std::cout << ss.str(); 
}
0
ДЕСАНТУРА
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 179
28.07.2015, 10:30  [ТС] 11
Цитата Сообщение от shmkv Посмотреть сообщение
и в чем проблема? 90% твоей задачи я уже расписал. Добавил бы что-то вроде этого:
Я так и сделал, только еще проще, кода много очень, аж 3 функции нужно писать, просто думал есть буфер по-проще, чтобы хотя б в одну функцию залепить, ну нет так нет.
0
shmkv
1207 / 430 / 59
Регистрация: 21.07.2015
Сообщений: 1,113
28.07.2015, 10:37 12
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
кода много очень, аж 3 функции нужно писать
ты байты на диске экономишь?
0
28.07.2015, 10:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2015, 10:37

Вывод переменной LPWSTR
Помогите новичку в WinAPI static LPWSTR str; PAINTSTRUCT paint; RECT...

Получение текущего значения переменной семафора
semControl = CreateSemaphore(NULL, n, n + n, _T(&quot;SemControl&quot;)); int...

Некорректный вывод переменной TextOut после wsprintf
Программа выводит на экран китайские иероглифы на месте преобразованной через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru