Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
#1

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

09.04.2013, 18:52. Просмотров 1664. Ответов 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))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
09.04.2013, 18:55     std::setw() как аргумент функции #2
yuron_477, Кхм. int принимает ведь. Манипулятор std::setw возвращает отнюдь не int.
http://en.cppreference.com/w/cpp/io/manip/setw
Или я не понял вопроса
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 20:54  [ТС]     std::setw() как аргумент функции #3
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;
}
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
09.04.2013, 21:05     std::setw() как аргумент функции #4
yuron_477,
C++
1
2
template<typename F>
void show(F sw) { /* ... */ }
?
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 21:22  [ТС]     std::setw() как аргумент функции #5
Да, блин, не с той стороны заходил. А по умолчанию параметр как задать чтоб show() без аргумента вызвать (с setw(0))?
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
09.04.2013, 21:37     std::setw() как аргумент функции #6
yuron_477, вроде никак, ведь setw(0) - это уже вызов; перегрузи show.

Добавлено через 4 минуты
Вообще, наверное, не факт, что это везде будет работать: setw возвращает непонятно что. По крайней мере я не понял) но вариант с шаблоном ф-ии работает с g++.
igorrr37
1636 / 1264 / 129
Регистрация: 21.12.2010
Сообщений: 1,925
Записей в блоге: 7
09.04.2013, 21:50     std::setw() как аргумент функции #7
Цитата Сообщение от 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
    };
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 22:18  [ТС]     std::setw() как аргумент функции #8
Походу решил:
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 22:20     std::setw() как аргумент функции
Еще ссылки по теме:

Указатель на функцию с аргументами, как аргумент другой функции C++
Написать программу с использованием функции setw C++
Как сделать ввод в аргумент(ы) функции? C++
Абстрактный класс, как аргумент функции C++
C++ Указатель массива как аргумент функции

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
09.04.2013, 22:20     std::setw() как аргумент функции #9
yuron_477, тут такое дело: если setw возвращает не функтор, а void, например?
Yandex
Объявления
09.04.2013, 22:20     std::setw() как аргумент функции
Ответ Создать тему
Опции темы

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