Во-первых, вместо C # typeof()
вы используете typeid
в C ++. Итак, typeof(int)
становится int::typeid
.
Во-вторых, при ссылке на универсальные типы кажется, что вы просто опускаете угловые скобки. Итак, typeof(List<>)
становится List::typeid
.
Проблема в том, что вы не можете указать количество аргументов типа. И Nullable::typeid
возвращает тип неуниверсального статического класса Nullable
, а это не то, что нам нужно.
Я не нашел способа получить тип напрямую из C ++ / CLI. Но вы всегда можете использовать Type.GetType()
:
Type^ nullableType = Type::GetType("System.Nullable`1");
return nullableType->MakeGenericType(t);
(`1
- это способ, который внутренне использует .Net для различения типов с различным количеством аргументов типа.)
Это перестанет работать, если тип Nullable<T>
когда-либо будет перемещен из mscorlib, но я сомневаюсь, что это произойдет.