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!!
}
你需要furher解釋?
更新:
我想我會做到這一點,需要的代碼少變化的東西有點不同。我做了這個:
.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:類 'PrivatePtr' 需要有DLL接口由CLAS 'MyClass的'
等等,你的客戶端使用?我不希望它被任何人使用,除了myclass內部...安全地忽略?我試圖尋找答案,但沒有任何案例接近我在這裏。在其他情況下,它確實似乎有點問題。
我愛你對問題的解釋。 –
常量指針與指向常量的指針不相同。如果你想強制傳遞常量,你應該編寫你自己的指針包裝器。 –