小编Joh*_*ore的帖子

是否可以调用超类的构造函数,两个类远离C++中的当前类

我有三个继承如下的类:

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

c++ inheritance constructor

6
推荐指数
1
解决办法
210
查看次数

如何在go中将[] [] byte转换为**char

我想从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的大小是一个字节.这就是说,谢谢你们的回应.我能够根据自己的需要调整接受的答案.

type-conversion go cgo

5
推荐指数
1
解决办法
2210
查看次数

在 Go 中通过嵌入式 Stuct 实现 json 编组器

我有一个结构,我想对其进行有效的 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 编组器的结构?

json go

5
推荐指数
1
解决办法
4195
查看次数

标签 统计

go ×2

c++ ×1

cgo ×1

constructor ×1

inheritance ×1

json ×1

type-conversion ×1