我有三个继承如下的类:
Class_A
Class_B : public Class_A
Class_C : public Class_B
Run Code Online (Sandbox Code Playgroud)
Class_A
包含一个构造函数:
public: Class_A(const char *name, int kind);
Run Code Online (Sandbox Code Playgroud)
Class_B
不包含该构造函数.
在Class_C
我想援引Class_A的构造.像:
Class_C(const char *name, int kind) : Class_A::Class_A(name,kind) {
}
问题是我无法添加中间构造函数Class_B
,因为Class_B
生成的代码每次清理时都会重新生成.所以我不能做任何持久的改变Class_B
.不用说,构造函数的上面一行Class_C
给出了error: "type 'Class_A' is not a direct base of '
Class_C'".
有没有办法可以调用Class_A
子类中的构造函数Class_C
,而不需要相同类型的构造函数Class_B
?
我想从go [] []字节转换为C**char.换句话说,我有一个字节矩阵,我想转换为C中的char双指针.
请假设我必须有一个[] []字节作为输入,**char作为输出.
我知道可以通过执行以下操作从[] byte转换为*char:
((*C.char)(unsafe.Pointer(&data[0])))
Run Code Online (Sandbox Code Playgroud)
但似乎不可能将这种情况扩展到第二个维度.我尝试了一些非常复杂的东西,我将[] []字节打包成一个新的[]字节.然后我将该[]字节发送到C函数,该函数使用指针算法创建一个**char,指向正确位置的新[]字节.
然而,这种转换给了我奇怪的行为,我的数据在几次迭代中是正确的,但在函数调用之间似乎被破坏了.
如果有人有任何想法,我会非常感激.
从响应中我看到,说明我正在处理原始数据而不是字符串也很重要.因此go字节类型.因此,如果添加了C字符串终止符,原始数据将被破坏.我只是使用C**char,因为char的大小是一个字节.这就是说,谢谢你们的回应.我能够根据自己的需要调整接受的答案.
我有一个结构,我想对其进行有效的 JSON 编码:
type MyStruct struct {
*Meta
Contents []interface{}
}
type Meta struct {
Id int
}
Run Code Online (Sandbox Code Playgroud)
该结构包含已知形式的元数据和未知形式的内容,内容列表是在运行时填充的,因此我实际上无法控制它们。为了提高 Go 的编组速度,我想在 Meta 结构上实现 Marshaller 接口。Marshaller 界面如下所示:
type Marshaler interface {
MarshalJSON() ([]byte, error)
}
Run Code Online (Sandbox Code Playgroud)
请记住,元结构并不像此处所示的那么简单。我尝试通过 Meta 结构实现 Marshaler 接口,但似乎当我随后 JSON 编组 MyStruct 时,结果只是 Meta 编组接口返回的结果。
所以我的问题是:如何 JSON 编组一个结构,该结构包含带有自己的 JSON 编组器的嵌入式结构和另一个没有 JSON 编组器的结构?