1

Тема: Що це за шаблон? Вказівник на функцію?

Добрий день.
Нещодавно розпочав читати книгу Александерску. І там зустрів незрозумілу частину коду в шаблоні:

template
<
class AbstractProduct,
class IndetifierType,
class ProductCreator = AbstractProduct* (*)(),
template<typename, class>
class FactoryErrorPolicy = DefaultFactoryError
>
class Factory;

Якого типу буде ProductCreator?, і шо взагалі це значить (class ProductCreator = AbstractProduct* (*)())?
Настільки я зрозумів

AbstractProduct* (*)()

- це вказівник на функцію без імені, але тоді як його використовувати?

2

Re: Що це за шаблон? Вказівник на функцію?

ProductCreator за замовчанням - тип "вказівник на функцію без параметрів, що повертає вказівник на AbstractProduct".
"Без імені" - звісно, бо це тип. Так само можете вважати int "змінною без імені". Це ж не заважає вам його використовувати?

3

Re: Що це за шаблон? Вказівник на функцію?

Пальцем в небо кажу що екземпляри абстарт продакта будуть створюватись через виклик ProductCreator()

Maybe a = Just a | Nothing
Подякували: Lokki1

4 Востаннє редагувалося Lokki (11.02.2017 22:52:17)

Re: Що це за шаблон? Вказівник на функцію?

Зрозуміло, ну тоді якщо ми зробимо так

ProductCreator prodCreator; 
prodCreator();

чому код компілюється якщо ця функція немає тіла?

Да можна і

ProductCreator()();

тільки я щось не зрузумів навіщо 2 рази ()()?

5

Re: Що це за шаблон? Вказівник на функцію?

Lokki написав:

Зрозуміло, ну тоді якщо ми зробимо так

ProductCreator prodCreator; 
prodCreator();

чому код компілюється якщо ця функція немає тіла?

Будь ласка, напишіть, що саме вам зрозуміло. Бо наразі ви питаєте єресь.

Lokki написав:

Да можна і

ProductCreator()();

тільки я щось не зрузумів навіщо 2 рази ()()?

Одні дужки - виклик функції, а інші - конструктор.

Подякували: Lokki1

6 Востаннє редагувалося Lokki (13.02.2017 16:20:13)

Re: Що це за шаблон? Вказівник на функцію?

Ладно я поняв. Не замітив що при визова функції програма крашеться.
Дякую за коментарі.