Я пытаюсь преобразовать некоторый код C# в код C++/CLI (по некоторым причинам производительности, а также избежать кучи вопросов взаимодействия), однако я ударил стену. По общему признанию, мои знания C++/CLI отсутствуют (в лучшем случае).C++/CLI Generic Static Class
Попытка конвертировать общий статический класс, который мы использовали для кеширования размера, является серьезной головной болью.
Класс C# выглядит следующим образом:
public static class SizeCache<T>
{
public static int Size = Marshal.SizeOf(typeof(T));
}
И оболочка C++/CLI (насколько я понял) является следующим:
generic <typename T>
public ref class SizeCache abstract sealed
{
private:
static SizeCache()
{
Size = Marshal::SizeOf(T::typeid);
}
public:
static int Size;
};
Все, кажется, компилируется, однако, когда я обращаюсь к нему через;
int size = SizeCache<T>::Size;
Я получаю ошибки компилятора.
ошибка C2039: 'Размер': не является членом '' глобального пространства имен'»
ошибка C2065: 'Размер': необъявленный идентификатор
К сожалению, я не могу видеть что я делаю неправильно в этом случае.
Причина для класса в первую очередь заключается в том, чтобы избежать некоторых проблем с маршаллером (особенно при работе с типами общей структуры) и избежать удара производительности, вызванного постоянным вызовом параметра SizeOf на тех же базовых типах.
Что я здесь делаю неправильно?
Я думаю, что вы цитируете сообщения об ошибках, которые на полпути вниз список ошибок. Сначала вы должны были получить диагностику для неизвестного идентификатора SizeCache, единственный возможный способ, которым компилятор мог думать, что Size находится в глобальном пространстве имен. Начните в верхней части списка. –