Глядя на эту статью здесь ссылки на дженерики в последней строке указывает, что генерики используется в C++/CX с интерфейсами и делегатами.
http://msdn.microsoft.com/en-us/library/windows/apps/br212455(v=vs.110).aspx
Это имеет смысл, потому что, так как он определен как интерфейс, который позволяет ++/CX компилятору C для компиляции встроенных функций коды для реальных объектов, а затем использовать общие интерфейсы способа, аналогичного шаблоны C++. Скомпилирован собственный код для функций, а общий интерфейс используется для работы с разными типами.
Для компилятора кажется, что это разница между C++/CLR и C++/CX. /clr: классы обобщений, интерфейсы & делегаты разрешены. /ZW: общие интерфейсы & только делегаты.
Если вы посмотрите здесь http://msdn.microsoft.com/en-us/library/windows/apps/hh699870(v=vs.110).aspx, вы заметите, что для классов нет общих правил.
Но если вы прочитали эту тему http://msdn.microsoft.com/en-us/library/windows/apps/hh755792(v=vs.110).aspx, вы заметите, что дженерики применяются как интерфейсы.
«Общий класс» в C++/CX достигается с помощью стандартных шаблонов C++. Конкретный экземпляр или компилятор, сгенерированный определенным типом родового, экспортируется в метаданные, но не сам шаблон. Таким образом, вы можете увидеть MyClass и MyClass из метаданных, но не оригинальный MyClass. Это не относится к случаю общего интерфейса, который экспортируется в метаданные как общий тип.
Более подробную информацию об этом можно найти здесь http://en.wikipedia.org/wiki/Windows_Runtime
Так, чтобы полностью ответить на этот вопрос, так как в это время, код в методах прекомпилируется нативный код в выходной DLL или EXE и прикрепляется к фактическим отсутствием родовые классы. НО код можно использовать в общих чертах, используя общие интерфейсы. Таким образом, десять различных классов могут реализовать IMyInterface, а затем переменную типа IMyInterface можно использовать, например, для работы с примерами из десяти разных типов.
Таким образом, короткий ответ заключается в том, что в C++/CX нет ничего подобного полным общим классам, как в C++/CLR. Используйте шаблоны для того же эффекта в приложениях C++/CX. Если у вас должны быть общие файлы C++, используйте dll, созданный с помощью C++/CLI, и выполните этот код из программы, скомпилированной как C++/CX.
Примечание! Я почерпнул это из рассмотрения различных статей, а некоторые из них в msdn, похоже, говорят, что они могут быть изменены.
Теперь использовать общие интерфейсы в C++/CX с шаблонами, вероятно, то, что они намереваются. Таким образом, вы создаете шаблон MyClass, а затем реализуете свой общий интерфейс MyInterface, поэтому, если вы создали экземпляр MyClass, новый тип будет автоматически реализовывать MyInterface, и тогда этот интерфейс можно будет использовать где угодно. Поэтому вне компилируемой dll и файлов заголовков другие C++/CX-модули и файлы могут работать с типами, такими как MyInterface, без использования файла заголовка, потому что экземпляр шаблона находился внутри скомпилированной dll, но C++-файл, использующий метаданные, знает, как введите тип MyInterface, потому что он содержит метаданные для MyInterface, но не метаданные для MyClass.
В очень короткие сроки отсутствуют общие классы, а общий интерфейс и поддержка делегатов в C++/CX - это все, что на самом деле работает как generics в C++/CLI.
Понюхает, как «давайте бросить все в объект, а затем обратно» на дженерики. –
будет общим. Стирание стилей типа C++ - это boost :: any, но вы не должны использовать генерические файлы runtime, если вам этого не нужно, и большинству людей никогда не придется. Вместо этого используйте шаблоны. –
Я думаю, что это время для компиляции. Когда было встречено инициирование, например «MyTemplate obj;», компилятор будет генерировать копию определения конкретного класса с помощью «MyTemplate» и «RealType», а затем использует его для создания объекта. После компиляции нет шаблона. –
Lyn