我有了一个问题,C++和Sharma之间有着相当复杂的互动,我希望社区能够帮助我。 如果我的解释没有意义,请让我在评论中知道,我试图澄清。
我们的C++代码包括一个称为“IODevice”的家长班,该班是“File”和“Socket”等其他班子的家长。 我们这样做是为了,在我们的许多法典中,我们可以笼统地与实际上可能是档案或书状或我们原先建造的任何物体合作。 在C++法典中,所有工作都属于罚款。
我们开始为我们的一些物体建造 Python。 我们不想修改原来的“File”或“Socket”类别;我们创建了“FilePy”和“SocketPy”级的“File”和“Socket”级。 * 这些班级含有必要的装饰。
问题始于此地。 请允许我说,我有一个“InputProcessorPy”的C++级,具有适当的 Python约束力。 我想能够用我的“FilePy”或“SocketPy”标出“InputProcessorPy”将从数据中提取数据。 “InputProcessorPy” 的约束性法规类似:
PyObject* InputProcessor::PyMake(PyObject* ignored, PyObject *args)
{
PyObject* cD_py;
IODevice* inputFile;
if (!PyArg_ParseTuple(args, "O", &cD_py))
return NULL;
inputFile = (IODevice*) cD_py;
inputFile->isReadable();
printf("------>>>> Done
");
return (PyObject *) new CL_InputRenderer(*inputFile, InputProcessor::Type);
}
如果我采用这一守则,我就会发现一种分化错误,即我所说的是可检索的投入法,实际上这是冰基类的一种方法。
如果我这样做的话:
...
FilePy* inputFile;
...
inputFile = (FilePy*) cD_py;
inputFile->isReadable();
...
该法典对本案进行罚款。 然而,这是不可取的,因为它假定我们通过的是“FilePy”物体,但情况并非如此;它可能是一种“SocketPy”或“BufferPy”或“StringPy”或任何其他类型的“IODevice”子类别。
看起来,如果 Python磨进程与我们重新尝试使用的C++级继承结构不相容。 是否有任何人试图解决像以前这样的问题? 我们是否做我们的C++遗产错了,或者我们是否应该做些不同于我们具有约束力的事情来做这项工作?