30 lines
		
	
	
		
			600 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			600 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #ifndef PIMPL_H_HPP_ | ||
|  | #define PIMPL_H_HPP_ | ||
|  | 
 | ||
|  | #include <memory> | ||
|  | 
 | ||
|  | // | ||
|  | // opaque implementation type with perfect forwarding of constructor arguments | ||
|  | // | ||
|  | // see pimpl_impl.hpp for the out-of-line definitions of the members and lifetime management | ||
|  | // | ||
|  | // thanks to Herb Sutter (http://herbsutter.com/gotw/_101/) for the implementation | ||
|  | // | ||
|  | template<typename T> | ||
|  | class pimpl | ||
|  | { | ||
|  | private: | ||
|  |   std::unique_ptr<T> m_; | ||
|  | 
 | ||
|  | public: | ||
|  |   pimpl (); | ||
|  |   template<typename ...Args> pimpl (Args&& ...); | ||
|  |   ~pimpl (); | ||
|  |   T * operator -> (); | ||
|  |   T const * operator -> () const; | ||
|  |   T& operator * (); | ||
|  |   T const& operator * () const; | ||
|  | }; | ||
|  | 
 | ||
|  | #endif |