我想在 C++ 中尝试 PIMPL。
就我而言,我正在使用operator()
访问私人成员。
接口类A
和实现类AImpl
都有operator() const
和operator()
。
代码如下所示:
#include <iostream>
class AImpl
{
public:
explicit AImpl()
{
x = 0;
}
const int &operator()() const
{
std::cout << "const access in AImpl" << std::endl;
return x;
}
int &operator()()
{
std::cout << "not const access in AImpl" << std::endl;
return x;
}
private:
int x;
};
class A
{
public:
A()
{
impl = new AImpl;
}
~A()
{
delete impl;
}
const int &operator()() const
{
std::cout << "const access in A" << std::endl;
return impl->operator()();
}
int &operator()()
{
std::cout << "not const access in A" << std::endl;
return impl->operator()();
}
private:
AImpl *impl;
};
int main()
{
A non_const_a;
std::cout << non_const_a() << std::endl;
const A const_a;
std::cout << const_a() << std::endl;
}
我使用以下命令编译程序
g++ Main.cpp
结果表明:
# ./a.out
not const access in A
not const access in AImpl
0
const access in A
not const access in AImpl
0
从结果可以看出:
A
的 const 成员函数const int &A::operator()() const
调用int &AImpl::operator()()
,但不调用const int &AImpl::operator()() const
.
为什么会这样?
在 PIMPL 的情况下,我希望 A 中的成员函数和 AImpl 是一一对应的。
我想const int &A::operator()() const
打电话const int &AImpl::operator()() const
。
我怎样才能修改我的代码来实现这一点?修改会降低任何性能吗?
上面提到的是一个简单的案例。在实际情况下,A 是一个容器,将在我的代码中广泛使用,因此我不希望修改降低性能。
如果这是一个愚蠢的问题,我深表歉意。谢谢你的时间。