#pragma once
///////////////////////////////////////////////////////////////////////
// CodeUtilities.h - small, generally useful, helper classes //
// ver 1.0 //
// Language: C++, Visual Studio 2017 //
// Application: Most Projects, CSE687 - Object Oriented Design //
// Author: Jim Fawcett, Syracuse University, CST 4-187 //
// jfawcett@twcny.rr.com //
///////////////////////////////////////////////////////////////////////
/*
* Package Operations:
* -------------------
* This package provides class:
* - Converter<T> converts T to and from strings
*
* Build Process:
* --------------
* Required Files:
* CodeUtilities.h
*
* Maintenance History:
* --------------------
* ver 1.0 : 12 Jan 2018
* - first release
* - refactored from earlier Utilities.h
*
* Notes:
* ------
* - Designed to provide all functionality in header file.
* - Implementation file only needed for test and demo.
*
* Planned Additions and Changes:
* ------------------------------
* - none yet
*/
#include <string>
#include <sstream>
namespace Utilities
{
/////////////////////////////////////////////////////////////////////
// Converter class
// - supports converting unspecified types to and from strings
// - a type is convertible if it provides insertion and extraction
// operators
template <typename T>
class Converter
{
public:
static std::string toString(const T& t);
static T toValue(const std::string& src);
};
//----< convert t to a string >--------------------------------------
template <typename T>
std::string Converter<T>::toString(const T& t)
{
std::ostringstream out;
out << t;
return out.str();
}
//----< convert a string to an instance of T >-----------------------
/*
* - the string must have been generated by Converter<T>::toString(const T& t)
* - T::operator>> must be the inverse of T::operator<<
*/
template<typename T>
T Converter<T>::toValue(const std::string& src)
{
std::istringstream in(src);
T t;
in >> t;
return t;
}
}