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

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

09.04.2013, 18:52. Просмотров 1859. Ответов 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))

http://www.cyberforum.ru/cpp-beginners/thread1270856.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 18:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос std::setw() как аргумент функции (C++):

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

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

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

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

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

8
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 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
1441 / 778 / 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!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
09.04.2013, 21:05 #4
yuron_477,
C++
1
2
template<typename F>
void show(F sw) { /* ... */ }
?
1
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 21:22  [ТС] #5
Да, блин, не с той стороны заходил. А по умолчанию параметр как задать чтоб show() без аргумента вызвать (с setw(0))?
0
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
09.04.2013, 21:37 #6
yuron_477, вроде никак, ведь setw(0) - это уже вызов; перегрузи show.

Добавлено через 4 минуты
Вообще, наверное, не факт, что это везде будет работать: setw возвращает непонятно что. По крайней мере я не понял) но вариант с шаблоном ф-ии работает с g++.
1
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 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
1441 / 778 / 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!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 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
Привет! Вот еще темы с решениями:

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

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

Указатель массива как аргумент функции
Я прочитал несколько алгоритмов сортировки массивов, но не совсем понял, если...

Функция как аргумент другой функции
Добрый вечер, уважаемые. Собственно, пытаюсь функцию запихнуть в аргументы...


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

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

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