.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;
}
And then use it like this:
.h
#include <PrivatePtr.h>
class DLLEXPORTMACROTHING myclass
{
...
private:
struct Private;
PrivatePtr<Private> d;
};
.cpp
#include <PrivatePtr.cpp>
struct myclass::Private()
{
...
}