gpt4 book ai didi

c++ - 是否可以更改 'this' 关键字的类型?

转载 作者:行者123 更新时间:2023-11-28 06:21:26 24 4
gpt4 key购买 nike

<分区>

现在这似乎是一个奇怪的问题,但我遇到了一个让我大吃一惊的编译器错误,即使有修复,我也想知道它为什么会失败。

假装我正在使用一个名为 Corba 的 API,简称为 RPC。在我的程序中,我必须创建一个派生自 Corba 对象的对象。

class MyClass : public CorbaClass;

简单的东西,现在在 MyClass 的方法之一中,我正在调用一个需要 CorbaClass* 的函数,所以我只需传入 this 指针,请注意该方法不是 const 方法,所以它肯定可以正常工作吗?

但是我在编译时遇到错误,指出我尝试传递的参数实际上是 CorbaClass* const 类型。现在你可以想象我的困惑了,这肯定是不可能的,那需要 this 是一个左值,不是吗?所以突然之间,这让我质疑我对 C++ 本身的部分知识!

现在在 TAO 的文档(我正在使用的 Corba 的具体实现)中发现他们实际上有一段针对这种情况的代码,我看到他们做了一些奇怪的事情。他们没有直接传递 this,而是调用一个方法 _this() 并通过它传递返回值,所以我做了一些挖掘,发现该方法是在Corba 基类为:

CorbaClass* _this(void);

现在这对我来说似乎完全疯了,但也许那是因为我以前从未遇到过它,有人知道为什么 this 会发生任何奇怪的事情吗?

我相信我使用的编译器是 GCC 4.5.1

编辑:一些示例代码

我的类.h

    class MyClass
: public POA_NotifyExt::ReconnectionCallback
{
public:
void Initialise();

private:
NotifyExt::ReconnectionRegistry_var m_ReconnectionRegistry;
}

我的类.cpp

void Initialise()
{
m_ReconnectionRegistry->register_callback( this );
}

产生错误:

error: no matching function for call to ‘NotifyExt::ReconnectionRegistry::register_callback(MyClass* const)’
orbsvcs/NotifyExtC.h:491:63: note: candidate is: virtual NotifyExt::ReconnectionRegistry::ReconnectionID NotifyExt::ReconnectionRegistry::register_callback(NotifyExt::ReconnectionCallback*)

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com