С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2

std::setw() как аргумент функции

09.04.2013, 18:52. Показов 3820. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
void print(const int format = 0) const
    {
      for (size_t i = 0; i<m_rows; ++i)
        {
          for (size_t j = 0; j<m_cols; ++j)
            std::cout<<std::setw(format)<<m_matrix[i][j]<<" ";
          std::cout<<"\n";
        } 
    }
Как бы мне эту функцию вызывать так? :
C++
1
a.print(std::setw(4))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2013, 18:52
Ответы с готовыми решениями:

Забиндить второй аргумент функции, используя std::bind2nd
Как забиндить свою функцию с двумя аргументами в функцию с одним аргументом? Вот пример в котором нужно сделать для b: #include...

There are no arguments to 'setw' that depend on a template parameter, so a declaration of 'setw' must be available
void throw_if_less_zero(int value) { if (value &lt; 0) throw new out_of_range(&quot;value должно быть неотрицательным&quot;); } ...

Std::sort - 3 аргумент другая функция
Здравствуйте. Так все работает //вызывается из наследника sort(group.begin(), group.end(), ( MyClass&amp; obj1, MyClass&amp;...

8
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.04.2013, 18:55
yuron_477, Кхм. int принимает ведь. Манипулятор std::setw возвращает отнюдь не int.
http://en.cppreference.com/w/cpp/io/manip/setw
Или я не понял вопроса
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 20:54  [ТС]
ForEveR , я хотел так переделать функцию print что бы она принимала в качестве своего аргумента std::setw и потом его использовала. Попробовал передать указатель, но не работает. Не соображу, как сделать. Для примера упростим код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void show(void (*sw)(int n))
{
    std::cout<<sw<<"Hello\n";
}
 
int main()
{
    std::cout<<std::setw(20)<<"Hello\n";
    show(std::setw(20));
  
    return 0;
}
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
09.04.2013, 21:05
yuron_477,
C++
1
2
template<typename F>
void show(F sw) { /* ... */ }
?
1
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 21:22  [ТС]
Да, блин, не с той стороны заходил. А по умолчанию параметр как задать чтоб show() без аргумента вызвать (с setw(0))?
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
09.04.2013, 21:37
yuron_477, вроде никак, ведь setw(0) - это уже вызов; перегрузи show.

Добавлено через 4 минуты
Вообще, наверное, не факт, что это везде будет работать: setw возвращает непонятно что. По крайней мере я не понял) но вариант с шаблоном ф-ии работает с g++.
1
 Аватар для igorrr37
2871 / 2018 / 991
Регистрация: 21.12.2010
Сообщений: 3,742
Записей в блоге: 9
09.04.2013, 21:50
Цитата Сообщение от gray_fox Посмотреть сообщение
setw возвращает непонятно что
по-моему тип возвращаемого значения определяется компилятором, в gcc возвращается структура:
C++
1
struct _Setw { int _M_n; };
а в vs12 структура:
C++
1
2
3
4
5
6
7
8
9
10
11
template<class _Arg>
    struct _Smanip
    {   // store function pointer and argument value
    _Smanip(void (__cdecl *_Left)(ios_base&, _Arg), _Arg _Val)
        : _Pfun(_Left), _Manarg(_Val)
        {   // construct from function pointer and argument value
        }
 
    void (__cdecl *_Pfun)(ios_base&, _Arg); // the function pointer
    _Arg _Manarg;   // the argument value
    };
1
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 22:18  [ТС]
Походу решил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<typename F = std::decay<decltype(std::setw(0))>::type> 
void show(F sw = std::setw(0))
{
    std::cout<<sw<<"Hello\n";
}
 
int main()
{
    show(std::setw(20));
    show();
  
    return 0;
}
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
09.04.2013, 22:20
yuron_477, тут такое дело: если setw возвращает не функтор, а void, например?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2013, 22:20
Помогаю со студенческими работами здесь

Написать программу с использованием функции setw
написать программу вычисления квадратов int значений до 100. Эта программа должна вывести два столбца: в первом значение, во втором -...

Класс как аргумент функции
Доброго времени суток:) Набрёл на такой пример в openGL и не могу понять как он робит, подскажите. Вот описание ф-ции: void...

Auto как аргумент функции
Возможно ли объявить параметр функции как auto? void func(auto pt); //...

Передача функции указатель на элемент std::vector<std::string>
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...

Абстрактный класс, как аргумент функции
добрый день. есть базовый класс Tag внем строковое поле Name есть производные от него класы SmplTag со строковым полем Value и класс...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru