Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
1

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

09.04.2013, 18:52. Просмотров 1889. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 18:52
Ответы с готовыми решениями:

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

Std::sort - 3 аргумент другая функция
Здравствуйте. Так все работает //вызывается из наследника...

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

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

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

8
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
09.04.2013, 18:55 2
yuron_477, Кхм. int принимает ведь. Манипулятор std::setw возвращает отнюдь не int.
http://en.cppreference.com/w/cpp/io/manip/setw
Или я не понял вопроса
0
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 20:54  [ТС] 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;
}
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
09.04.2013, 21:05 4
yuron_477,
C++
1
2
template<typename F>
void show(F sw) { /* ... */ }
?
1
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 21:22  [ТС] 5
Да, блин, не с той стороны заходил. А по умолчанию параметр как задать чтоб show() без аргумента вызвать (с setw(0))?
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
09.04.2013, 21:37 6
yuron_477, вроде никак, ведь setw(0) - это уже вызов; перегрузи show.

Добавлено через 4 минуты
Вообще, наверное, не факт, что это везде будет работать: setw возвращает непонятно что. По крайней мере я не понял) но вариант с шаблоном ф-ии работает с g++.
1
igorrr37
1872 / 1488 / 751
Регистрация: 21.12.2010
Сообщений: 2,478
Записей в блоге: 11
09.04.2013, 21:50 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
    };
1
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 22:18  [ТС] 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;
}
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
09.04.2013, 22:20 9
yuron_477, тут такое дело: если setw возвращает не функтор, а void, например?
0
09.04.2013, 22:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 22:20

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

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

Произвольный объект как аргумент функции
Здравствуйте! Подскажите, пожалуйста, можно ли функции передавать...


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

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

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