D 为什么“SomeType globalVar=cast(SomeType)import(“path/to/file”)”不起作用?

D 为什么“SomeType globalVar=cast(SomeType)import(“path/to/file”)”不起作用?,d,D,正如标题所说,为什么 SomeType globalVar = cast(SomeType) import("path/to/file") 不起作用?结果 无法在编译时将“…”强制转换为“SomeType” 谢谢。原因可能很多。创建字符串文字。CastSomeType是否编译其他字符串?如果是,则/path/to/file中的文本对于要从中创建的SomeType是否有效?SomeType是否具有接受字符串的适当构造函数 此代码编译: struct S { this(

正如标题所说,为什么

SomeType globalVar = cast(SomeType) import("path/to/file")
不起作用?结果 无法在编译时将“…”强制转换为“SomeType”


谢谢。

原因可能很多。创建字符串文字。CastSomeType是否编译其他字符串?如果是,则/path/to/file中的文本对于要从中创建的SomeType是否有效?SomeType是否具有接受字符串的适当构造函数

此代码编译:

struct S {
    this(string s) {}
}

S globalS = cast(S)"foo";

删除S的构造函数会产生您描述的错误消息。这让我觉得SomeType没有具有适当签名的构造函数,但是如果不了解更多的代码和导入文件的内容,就很难说了。

这可能有很多原因。创建字符串文字。CastSomeType是否编译其他字符串?如果是,则/path/to/file中的文本对于要从中创建的SomeType是否有效?SomeType是否具有接受字符串的适当构造函数

此代码编译:

struct S {
    this(string s) {}
}

S globalS = cast(S)"foo";
删除S的构造函数会产生您描述的错误消息。这让我觉得SomeType没有具有适当签名的构造函数,但是如果不了解更多的代码和要导入的文件内容,就很难说这是正确的类型。

如果SomeType是正确的类型,它将起作用

importsome/path的结果是一个字符串。不能将字符串强制转换为结构。但在您的情况下,它可能是二进制数据,而不是实际的文本文件。 您可以执行以下操作:

//加载文件并将其转换为“immutableubyte[]` immutable ubyte[]manifestBinaryData=castimmutable ubyte[]importpath/to/file; //安全检查,您甚至可以添加一条错误消息,其中包含预期大小和实际大小 静态资产ManifestBinaryData.length>=SomeType.sizeof; //相当于C++中的重新解释。编译器不会检查任何内容。 immutable SomeType*myFont=castimmutable SomeType*manifestBinaryData.ptr; 你可以做更聪明的事情:例如,如果你愿意,你可以在编译时解析/处理数据。但是,我相信,上面的代码片段最接近您的意图。

如果SomeType是正确的类型,它将起作用

importsome/path的结果是一个字符串。不能将字符串强制转换为结构。但在您的情况下,它可能是二进制数据,而不是实际的文本文件。 您可以执行以下操作:

//加载文件并将其转换为“immutableubyte[]` immutable ubyte[]manifestBinaryData=castimmutable ubyte[]importpath/to/file; //安全检查,您甚至可以添加一条错误消息,其中包含预期大小和实际大小 静态资产ManifestBinaryData.length>=SomeType.sizeof; //相当于C++中的重新解释。编译器不会检查任何内容。 immutable SomeType*myFont=castimmutable SomeType*manifestBinaryData.ptr;
你可以做更聪明的事情:例如,如果你愿意,你可以在编译时解析/处理数据。但我相信上面的片段是,最接近您的意图。

我试图在程序中嵌入字体,但D似乎不允许在编译时强制转换到我的字体结构,我必须在运行时强制转换指针。我试图在程序中嵌入字体,但D似乎不允许在编译时强制转换到我的字体结构,我必须强制转换指针在运行时不起作用。重新解释从immutableubyte*到immutableFont的强制转换!…*在CTFE中不受支持,这很不幸。那么你最好的机会就是实现一个反序列化字体结构的函数。这个函数不起作用。重新解释从immutableubyte*到immutableFont的强制转换!…*在CTFE中不受支持,这很不幸。那么最好的方法就是实现一个反序列化字体结构的函数。