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

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

Войти
Регистрация
Восстановить пароль
 
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
#1

Аргументы по-умолчанию в указателе на функцию в классе - C++

06.07.2013, 23:53. Просмотров 473. Ответов 8
Метки нет (Все метки)

В классе создал указатель на функцию

C++
1
void set_window_style(void(*style)(char[4], char[4]));
Вот сам метод

C++
1
2
3
4
void Window::set_window_style(void(*style)(char ch1[4]="null", char ch2[4]="null"))
{
     //....
}
Ошибка возникает когда я ставлю параметры по-умолчанию

C++
1
error C2383: style: аргументы по умолчанию не разрешены для этого символа
Как можно это исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.07.2013, 23:58     Аргументы по-умолчанию в указателе на функцию в классе #2
никак. так задать аргументы по умолчанию не выйдет.

может такой вариант устроит:
C++
1
2
3
4
5
6
7
void Window::set_window_style(void(*style)(char [4], char [4]))
{
  char ch1[4] = "null";
  char ch2[4] = "null";
  ......
 
}
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.07.2013, 00:07     Аргументы по-умолчанию в указателе на функцию в классе #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Window::set_window_style(void(*style_)(const char*, const char*))
{
     struct {
        void (*func)(const char*, const char*);
 
        void operator()(const char *ch1 = "null", const char *ch2 = "null")
        {
           func(ch1, ch2);
        }
     } style = {style_};
     // ...
}
Нет ничего невозможного!
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
07.07.2013, 01:09  [ТС]     Аргументы по-умолчанию в указателе на функцию в классе #4
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Window::set_window_style(void(*style_)(const char*, const char*))
{
     struct {
        void (*func)(const char*, const char*);
 
        void operator()(const char *ch1 = "null", const char *ch2 = "null")
        {
           func(ch1, ch2);
        }
     } style = {style_};
     // ...
}
Нет ничего невозможного!
Я не совсем понял, что конкретно здесь происходит, но опять же при вызове функции с меня потребуют аргументы, а мне нужно чтобы я их не вводил(не всегда)
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
07.07.2013, 01:13     Аргументы по-умолчанию в указателе на функцию в классе #5
Цитата Сообщение от Egor138 Посмотреть сообщение
опять же при вызове функции с меня потребуют аргументы
При вызове какой функции, set_window_style?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.07.2013, 01:16     Аргументы по-умолчанию в указателе на функцию в классе #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
void foo(const char *s1 = "bar", const char *s2 = "baz")
{
    std::cout << s1 << " " << s2 << "\n";
}
 
void bar(void (*func_)(const char*, const char*))
{
    struct {
        void (*func)(const char*, const char*);
 
        void operator()(const char *s1 = "null1", const char *s2 = "null2")
        {
            func(s1, s2);
        }
    } func = {func_};
 
    func();
    func("c");
    func("c", "d");
}
 
int main()
{
    foo();
    foo("a");
    foo("a", "b");
 
    bar(foo);
}
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
07.07.2013, 01:21  [ТС]     Аргументы по-умолчанию в указателе на функцию в классе #7
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
int main()
{
* * foo();
* * foo("a");
* * foo("a", "b");
bar(foo);
}
Спасибо, теперь я понял как все работает. И как я понимаю упростить это так нельзя?

C++
1
bar( foo("", "") );
Такой вариант ввода невозможен, верно?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.07.2013, 01:23     Аргументы по-умолчанию в указателе на функцию в классе #8
Но конкретно ваша мечта утащить изначальные значения по умолчанию вместе с указателем, к сожалению, реализуема только вручную и ещё более ужасным способом.

Вариант возможен (если внутри bar этот аргумент вызывать исключительно без параметров, но чтоб он работал так, как будто получил те пустые строки). См. лямбды-замыкания из C++11, или там std::bind1st два раза, или аналогичный велосипед вручную.

Стандартую подставлялку параметров по умолчанию я что-то не припомню.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2013, 01:25     Аргументы по-умолчанию в указателе на функцию в классе
Еще ссылки по теме:
C++ Полиморфизм. Для чего нужны аргументы базового класса в наследуемом классе?
C++ Error C4519: аргументы шаблона по умолчанию можно использовать только в шаблоне класса
C++ Создать не менее двух конструкторов в классе, в том числе — по умолчанию
Написать класс «массив» (В классе реализовать следующие методы: конструкторы (по умолчанию, с параметрами,) C++
Где хранятся аргументы, передаваемые в функцию C++

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

Или воспользуйтесь поиском по форуму:
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
07.07.2013, 01:25  [ТС]     Аргументы по-умолчанию в указателе на функцию в классе #9
Спасибо))
Yandex
Объявления
07.07.2013, 01:25     Аргументы по-умолчанию в указателе на функцию в классе
Ответ Создать тему
Опции темы

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