Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224

Фабрика классов: ковариантные возвращаемые типы не поддерживаются в управляемых типах

10.07.2015, 09:50. Показов 1219. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Имеются 2 интерфейса:
1. IEmployeeAbstractFactory - представляет фабрику;
2. IEmployee - интерфейс сотрудника.
Пытаюсь из фабрики получить некоторый объект, который имплементирует IEmployee.
Класс EmployeeFactory имплементирует IEmployeeAbstractFactory.
Класс Employee имплементирует IEmployee.

C++
1
2
3
public interface class IEmployeeAbstractFactory{
    IEmployee^ getEmployee(String^, String^, String^);
};
C++
1
2
3
4
5
public interface class IEmployee{
    void setFirstName(String^);
    void setSecondName(String^);
    void setPatronicName(String^);
};
C++
1
2
3
4
5
6
7
ref class Employee : public IEmployee
{
private:
    String^ firstName;
    String^ secondName;
    String^ patronicName;
};
C++
1
2
3
4
5
6
ref class EmployeeFactory : IEmployeeAbstractFactory
{
public:
    EmployeeFactory(void);
    Employee^ getEmployee(String^, String^, String^);//C2392
};
При компиляции выводит ошибку, которая гласит о том, что:
C++
1
error C2392: Employee ^EmployeeFactory::getEmployee(System::String ^,System::String ^,System::String ^): ковариантные возвращаемые типы не поддерживаются в управляемых типах, в противном случае "IEmployee ^IEmployeeAbstractFactory::getEmployee(System::String ^,System::String ^,System::String ^)" был бы переопределен.
В интернете ни чего путного не нашел.
Как можно обойти данную ошибку? Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2015, 09:50
Ответы с готовыми решениями:

Что бы было возможно если ковариантные типы-параметры могли бы быть ограничениями?
Что бы было возможно если ковариантные типы-параметры могли бы быть ограничениями в where? Я имею ввиду под возможно - неправильный код,...

VS: В этой конфигурации не поддерживаются 128-битные типы с плавающей запятой
Добрый день, уважаемые коллеги. Прошу подсказать как исправить ошибку. 1. Создал в VS проект консольного приложения C++ под Linux...

Фабрика XDTO и типы в ней
Доброго времени суток! Не могу понять в каком модуле писать код? http://v8.1c.ru/overview/Term_000000274.htm Что значит типы?

5
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
10.07.2015, 11:28
C++
1
2
3
4
5
6
7
ref class EmployeeFactory : IEmployeeAbstractFactory
{
public:
    EmployeeFactory(void);
    // метод из IEmployeeAbstractFactory возвращает IEmployee^
    IEmployee^ getEmployee(String^, String^, String^); 
};
Иначе, если я правильно понял, IEmployeeAbstractFactory должен быть ковариантным.
Не знаю, как обстоят дела в C++/CLI с ко-/контравариантностью, но судя по сообщению
ковариантные возвращаемые типы не поддерживаются в управляемых типах
обстоят плохо.
1
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
13.07.2015, 07:49  [ТС]
Есть ли способ сделать по-другому?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
13.07.2015, 10:47
Konstantin1706, возвращать IEmployee^, как я привёл в коде выше.
Затем, для использования приводить к типу Employee^.
C++/CLI не поддерживает ко(нтра)вариантность возвращаемых/принимаемых объектов, так что придётся городить велосипеды.
Если уж очень нужно это свойство, то можно создать чистый, неуправляемый класс C++, он, насколько мне известно, поддерживает ко(нтра)вариантность, но пример не смогу написать, с плюсами знаком поверхностно, это к спецам.
1
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
13.07.2015, 13:36  [ТС]
tezaurismosis, вся была проблема в моей невнимательности и усталости к концу недели. IEmployee^ я пытался возвратить, получив очередную ошибку. Я не указал, что метод getEmployee будет виртуальным. Указав, что метод виртуальный и возвращает интерфейс, компилируется без ошибок. Спасибо, тебе, больше, tezaurismosis , и желаю огромного терпения =).
0
13.07.2015, 15:13

Не по теме:

Konstantin1706, и тебе спасибо за хорошие слова. Ты уже второй раз сам разбираешься с проблемой - моё участие минимально. Правильно говорят - хочешь решить проблему, объясни её другому. :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2015, 15:13
Помогаю со студенческими работами здесь

Фабрика классов
Всем привет. Изучая COM, набрел на фабрику классов. Я так понял, что фабрика классов, это компонент, который реализует другой компонент....

Фабрика обьектов и названия классов
Вопрос следующий: как можно получить название класса в виде строки, ну или как вариант превратить параметр шаблона(которым и будет этот...

Ошибка "смешанные типы не поддерживаются" при объявлении массива
нужно создать массив вот код: #pragma endregion char mas;//1=+ 2=- 3=* 4=/ 5=( 6=) 7=sin 8=cos 9=tg 10=ctg 0=число но выдаёт ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника 1С по перечислениям
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru