Да, поскольку IL2CPP является компилятором с опережением времени (AOT), он работает только для кода, который существует во время компиляции. Ни один код здесь не использует GenericMethod<float>
в «реальном» исходном коде C #, поэтому IL2CPP не знает, как сгенерировать соответствующий код, чтобы заставить эту реализацию работать.
Настоящим ограничением здесь является то, что общий тип аргумента - float
, который является типом значения. В этом случае вы можете без проблем использовать string
(ссылочный тип). IL2CPP разделяет реализацию всех универсальных типов, которые имеют универсальный аргумент, который является ссылочным типом (например, string
, object
и т. Д.). Это возможно, потому что все ссылочные типы в C # имеют одинаковый размер (точнее, IntrPtr.Size
).
Таким образом, ограничение здесь действительно двоякое:
- IL2CPP может генерировать только тот код, о котором известно во время компиляции
- Это ограничение применяется только к универсальным типам, когда аргумент типа является типом значения.
Обратите внимание, что теоретически IL2CPP также может совместно использовать реализацию универсальных типов с универсальными аргументами типа значения, хотя это еще не было реализовано.