Использование C ++ / CLI Action <..., ...> и Func <...> не поддерживается? - PullRequest
4 голосов
/ 03 февраля 2010

не похоже, что есть поддержка делегатов Action и Func в пространстве имен System в C ++ / CLI. По крайней мере, для нескольких общих аргументов, таких как:

System::Action<int, int>^ action = nullptr;
System::Func<int, int>^ func = nullptr;

Оба приводят к ошибкам, таким как:

error C2977: 'System::Action' : too many generic arguments  
error C2955: 'System::Action' : use of class generic requires generic argument list 

Работает только один аргумент. Действие:

System::Action<int>^ action = nullptr;

Кто-нибудь знает, почему или чего не хватает для этой работы. Я использую Visual Studio 2008, и у проекта есть целевая платформа 3.5.

Ответы [ 2 ]

8 голосов
/ 03 февраля 2010

Расположение типов Action и Func зависит от используемой версии платформы.

В рамках 3.5 все определения Func (универсальные или не универсальные) находятся в System.Core.dll. Это также верно для версий Action с 2 или более общими параметрами. Action и Action<T1,T2> в mscorlib.

В рамках 4.0 все определения Func и Action перенесены в mscorlib. В System.Core вставлены перенаправители типов, которые теперь указывают на mscorlib.

Silverlight 4.0 ближе к рамочному решению 3.5.

Убедитесь, что у вас есть ссылка на соответствующую DLL для вашего решения.

8 голосов
/ 03 февраля 2010

Следующие параметры определены в mscorlib -

Action
Action<T>

Но в System.Core определены следующие параметры.

Action<T1, T2>
Func<T1, T2>

Возможно, вам не хватает ссылки на эту сборку.1007 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...