"api design for C++"の本(70ページ)の例を理解しようとしています。私は、次の例のようfree_f()
autotimer.cpp
で宣言された自由な関数からAutoTimer::Impl
のメンバーにアクセスすることが可能に厥引き受けるテキストおよび例から「api design for C++」:C++のシンプルアクセス
// autotimer.h
class AutoTimer
{
public:
explicit AutoTimer(const std::string &name);
AutoTimer();
// allow access from other classes/functions in autotimer.cpp
class Impl;
private:
Impl* mImpl;
}
。
// autotimer.cpp
class AutoTimer::Impl
{
public:
std::string s;
}
void free_f(AutoTimer a){
std::cout << a.mImpl->s << std::endl;
}
しかし、私はこれを動作させることはできません。悲しいことに、本にはこれ以上の詳細はありません。だからImpl
のプライベートメンバーにアクセスするためにfree_f()
を修正するにはどうすればよいですか?
私はより明確にするために、コメント(および第1例)
// allow access from other classes/functions in autotimer.cpp
は本「のC++のためのAPIデザイン」からまっすぐであり、私はそれが何を意味するのかを知りたいです。
「a」はポインタではありません。 'mImpl'はポインタです。 – juanchopanza
そして 'mImpl'は' AutoTimer'の 'private'メンバなので、自由な関数はそれにアクセスできません。 –
...それが 'friend'関数でない限り。 –