。H
public:
void doStuff() const;
private:
struct Private;
Private * d;
.cpp
struct XX::Private
{
int count;
}
void XX::doStuff() const
{
d->count = 2; // I want an error here!!
}
您需要进一步解释吗?
更新:
我想我会做一些不同的事情,需要对代码进行较少的更改。我做的:
。H
template <class TPriv>
class PrivatePtr
{
public:
...
TPriv * const operator->();
TPriv const * const operator->() const;
...
private:
TPriv * m_priv;
};
.cpp
...
template <class TPriv>
TPriv * const PrivatePtr<TPriv>::operator->()
{
return m_priv;
}
template <class TPriv>
TPriv const * const PrivatePtr<TPriv>::operator->() const
{
return m_priv;
}
然后像这样使用它:
。H
#include <PrivatePtr.h>
class DLLEXPORTMACROTHING myclass
{
...
private:
struct Private;
PrivatePtr<Private> d;
};
.cpp
#include <PrivatePtr.cpp>
struct myclass::Private()
{
...
}
但这会导致 C4251 "myclass::d : class 'PrivatePtr' 需要有 dll-interface 供 clas 'myclass' 的客户端使用
等等,什么?我不希望它在内部被 myclass 以外的任何人使用...可以安全地忽略吗?我试图寻找答案,但没有一个案例与我在这里的情况相近。在其他情况下,它确实似乎有点问题。