template< typename TValue >
inline void Write( const TValue& value );
template<>
inline void Write( const std::string& value ) {}
template<>
inline void Write( const std::wstring& value ) {}
template<>
inline void Write( const int32_t& value ) {}
N(D) == {|D.Y|, |D.X|}
https://youtu.be/tcj3HzCHJuw
https://youtu.be/dRSbR_Do8kY
...
В сети подобных видео с пояснениями самой разной направленности в избытке. Можно просто насмотреться и сделать как понравилось.