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

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

Восстановить пароль Регистрация
 
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
06.07.2013, 23:53     Аргументы по-умолчанию в указателе на функцию в классе #1
В классе создал указатель на функцию

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: аргументы по умолчанию не разрешены для этого символа
Как можно это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2013, 23:53     Аргументы по-умолчанию в указателе на функцию в классе
Посмотрите здесь:

Аргументы функции по умолчанию C++
C++ Аргументы по умолчанию (что не так ?)
Аргументы по умолчанию C++ C++
C++ Аргументы функции по умолчанию
C++ Аргументы функции по умолчанию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 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
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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
 Аватар для 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!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
07.07.2013, 01:13     Аргументы по-умолчанию в указателе на функцию в классе #5
Цитата Сообщение от Egor138 Посмотреть сообщение
опять же при вызове функции с меня потребуют аргументы
При вызове какой функции, set_window_style?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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
 Аватар для 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
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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++ Создать не менее двух конструкторов в классе, в том числе — по умолчанию
В классе инициализировать массив, в классе создать функцию вывода массива на экран C++

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

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

Текущее время: 02:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru