###前提・実現したいこと
C++のクラス宣言をヘッダーとCPPファイルに分けて行う場合、Privateメンバ変数もヘッダーに記述しなければなりません。Privateにも関わらず外部から丸見え状態なのがもやもやするので、PimplのようにCPPファイルの方へ記述し、外部から隠蔽したいと考えているのですが、やり方がわかりません。
###該当のソースコード
今回の質問には直接関係ないとは思いますが、具体的に隠蔽したい箇所を示すためにも開発中のソースコードをのせます。
C++
1#ifndef __FrameRateInfo_h__ 2#define __FrameRateInfo_h__ 3 4#include <chrono> 5 6class FrameRateInfo{ 7public: 8 FrameRateInfo(int fps = 60); 9 10 bool UpdateFrameCount(); 11 void Wait1Frame(); 12 void GetFrameRate(double *frameRate); 13 14 15// この部分を外部から隠蔽したい 16private: 17 std::chrono::high_resolution_clock::time_point m_startTime; 18 int m_frameCount; 19 float m_frameRate; 20 static const int AVERAGE_COUNT = 60; 21 int FPS; 22}; 23 24#endif
C++
1#include <math.h> 2#include <Windows.h> 3#include <iostream> 4#include <chrono> 5#include "FrameRateInfo.h" 6 7using std::cout; 8using std::endl; 9using namespace std::chrono; 10 11// フレームレートを設定するコンストラクタ 12FrameRateInfo::FrameRateInfo(int fps){ 13 m_frameCount = 0; 14 m_frameRate = 0; 15 FPS = fps; 16} 17 18bool FrameRateInfo::UpdateFrameCount(){ 19 switch (m_frameCount){ 20 // フレームカウントが1ならば、その時刻を記憶する 21 case 0: 22 m_startTime = high_resolution_clock::now(); 23 break; 24 25 // 指定フレームカウントになったら、現在のフレームレートを平均から計算する 26 case AVERAGE_COUNT: 27 auto endTime = high_resolution_clock::now(); 28 m_frameRate = 1000 / (duration_cast<milliseconds>(endTime - m_startTime).count() / (float)AVERAGE_COUNT); 29 m_frameCount = 0; 30 m_startTime = endTime; 31 break; 32 } 33 34 m_frameCount++; 35 36 return true; 37} 38 39void FrameRateInfo::Wait1Frame(){ 40 switch (m_frameCount){ 41 // フレームカウントが1ならば、その時刻を記憶する 42 case 0: 43 m_startTime = high_resolution_clock::now(); 44 break; 45 46 // 指定フレームカウントになったら、現在のフレームレートを平均から計算する 47 case AVERAGE_COUNT: 48 auto endTime = high_resolution_clock::now(); 49 m_frameRate = 1000 / (duration_cast<milliseconds>(endTime - m_startTime).count() / (float)AVERAGE_COUNT); 50 m_frameCount = 0; 51 m_startTime = endTime; 52 break; 53 } 54 55 m_frameCount++; 56 57 58 59 auto tookTime = high_resolution_clock::now() - m_startTime; //かかった時間 60 auto waitTime = m_frameCount * 1000 / FPS - (DWORD)duration_cast<milliseconds>(tookTime).count(); //待つべき時間 61 if (waitTime > 0){ 62 Sleep(waitTime); //待機 63 } 64} 65 66// 現在のフレームレートを取得する 67void FrameRateInfo::GetFrameRate(double *frameRate){ 68 *frameRate = m_frameRate; 69} 70
###試したこと
Pimplイディオムというものを用いれば、関数ならヘッダーに記述することなく外部から隠蔽することが出来るらしいのですが、変数はできないのかやり方が悪いのか期待通りの動作にはなりませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2013 for Windows Desktop
回答よろしくお願いします。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。