C++ Tips & Tricks
Generic string conversion:
std::string aDouble = toString(3.4); std::string aInt = toString(4);
toString:
#include <sstream>
#include <iostream>
//____________________________________________________ toString
template <class T>
inline std::string toString(T x){
std::stringstream ss;
ss << x;
return std::string(ss.str());
}
Simple way to initialize a STL std::vector with arbitrary number of elements:
static const std::vector<std::string>
months(Vector<std::string>("Jan")("Feb")("Mar")("Apr")("May")("Jun")("Jul")("Aug")("Sep")("oct")("Nov")("Dec"));
Vector class:
template <typename T> class Vector;
//________________________________________________________ VectorPacker
template <typename T, unsigned int N>
class VectorPacker{
std::vector<T> & myVector;
public:
VectorPacker<T,N>(std::vector<T> & v):myVector(v){}
VectorPacker<T,N+1> operator () (T elm) {
if (myVector.size()>N)
myVector.resize(N);
myVector.push_back(elm);
return VectorPacker<T,N+1>(myVector);
}
//operator const std::vector<T>& () const{return myVector;};
operator std::vector<T> () {return myVector;};
friend class VectorPacker<T,N-1>;
friend class Vector<T>;
};
//________________________________________________________ Vector
template <typename T>
class Vector {
std::vector<T> myVector;
public:
Vector(void){}
explicit Vector(T elm) {
myVector.push_back(elm);
}
//operator const std::vector<T>& () const {return myVector;};
operator std::vector<T>(){return myVector;};
VectorPacker<T,2> operator () (T elm){
if (myVector.size()>1)
myVector.resize(1);
myVector.push_back(elm);
return VectorPacker<T,2>(myVector);
}
};