English 中文(简体)
我们如何能够妥善执行下级C++物体的弹 Python?
原标题:How can we properly implement Python bindings of subclassed C++ objects?

我有了一个问题,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++遗产错了,或者我们是否应该做些不同于我们具有约束力的事情来做这项工作?

最佳回答

你们的几类档案和IODevice是否来自PyObject? 否则,C++汇编者将解释:

inputFile = (IODevice*) cD_py;

a 包括:

inputFile = reinterpret_cast<IODevice*> (cD_py);

而不是你预期的:

inputFile = dynamic_cast<IODevice*> (cD_py);

如果所通过的实际类型不是PyObject,或者IODevice与继承的PyObject无关,那么C++汇编者或操作时间就没有办法知道如何找到合适的表象。

问题回答

暂无回答




相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签