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

标签 c++ gcc corba

<分区>

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

假装我正在使用一个名为 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*)

最佳答案

register_callback 需要一个 NotifyExt::ReconnectionCallback,而不是一个 POA_NotifyExt::ReconnectionCallback(注意不同的命名空间)。

MyClass 就是所谓的仆人:实现 CORBA 接口(interface)的服务器端对象。

由于 CORBA 的目标是独立于位置和语言,因此对象的客户不直接引用 Servant;它使用“对象引用”,其中包含到达对象所需的信息。因此,您需要将对象引用传递给 MyClass Servant 实现的 CORBA 对象。

获取此类引用的一种方法是使用 _this() 成员函数。

关于c++ - 是否可以更改 'this' 关键字的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29255280/

相关文章:

c++ - 不一致的警告 "conversion from ' const unsigned char' to 'const float' requires a narrowing conversion”

c - 编译超过 3 次时,Gcc/G++ 不会给出正确的结果

linux - 是否有可能在 linux 中找到哪个进程正在使用 OPENSSL?

c++ - 模板参数排列顺序错误。这是对的吗?

c++ - 为什么 boost::filesystem::path::string() 在 Windows 上按值返回,而在 POSIX 上按引用返回?

java - Corba 操作返回的序列大小是否有限制?

java - 如何使用拦截器在 CORBA 中操作发送到远程对象的参数

delphi - IDL 到类型库

c++ - 嵌套循环中 goto 的替代方法?

C++使用STL对矩阵的行进行排序