我一直在尝试将一些 C# 代码转换为 C++/CLI 代码(出于某些性能原因,以及避免一堆互操作问题),但是我碰壁了。诚然,我缺乏 C++/CLI 知识(绝对是最好的)。
尝试转换我们用于大小缓存的通用静态类被证明是一个令人头疼的问题。
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:“大小”:未声明的标识符
不幸的是,在这种情况下,我看不出我做错了什么。
之所以首先使用该类,是为了避免 Marshaler 的一些问题(特别是在处理泛型结构类型时),并避免在相同的基本类型上不断调用 SizeOf 导致的性能损失。
我在这里做错了什么?