1456 / 793 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
1

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

09.04.2013, 18:52. Показов 3303. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2013, 18:52
Ответы с готовыми решениями:

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

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 должно быть...

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

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

8
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.04.2013, 18:55 2
yuron_477, Кхм. int принимает ведь. Манипулятор std::setw возвращает отнюдь не int.
http://en.cppreference.com/w/cpp/io/manip/setw
Или я не понял вопроса
0
1456 / 793 / 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
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,727
09.04.2013, 21:05 4
yuron_477,
C++
1
2
template<typename F>
void show(F sw) { /* ... */ }
?
1
1456 / 793 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.04.2013, 21:22  [ТС] 5
Да, блин, не с той стороны заходил. А по умолчанию параметр как задать чтоб show() без аргумента вызвать (с setw(0))?
0
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,727
09.04.2013, 21:37 6
yuron_477, вроде никак, ведь setw(0) - это уже вызов; перегрузи show.

Добавлено через 4 минуты
Вообще, наверное, не факт, что это везде будет работать: setw возвращает непонятно что. По крайней мере я не понял) но вариант с шаблоном ф-ии работает с g++.
1
2479 / 1906 / 951
Регистрация: 21.12.2010
Сообщений: 3,473
Записей в блоге: 10
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
1456 / 793 / 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
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,727
09.04.2013, 22:20 9
yuron_477, тут такое дело: если setw возвращает не функтор, а void, например?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2013, 22:20
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru