Show DevBest [Code Snippet] Generic TryParse

Status
Not open for further replies.

Pro123

New Member
Feb 20, 2011
21
0
This is a re-post of an article I originally posted on my website.

Please note that this is a code snippet, not a tutorial. It doesn't explain what the code does since I assume you are smart enough to work that out for yourself (it's pretty basic code tbh).

Introduction
Recently I've been doing some work templatifying my I/O classes, and from that have come to the conclusion that templates and streams make for the ultimate generic programming tool. One of the best changes the templates and streams has made is to my tryParse function (which works in a similar vein to the .NET TryParse functions).

Previously there were a load of these, each handling a different variable type using old C functions. Now the function has been replaced by a single templated function, and a std::stringstream.

If you try and tryParse a type a std::stringstream can't handle, it just doesn't compile; best of all is that you can still expand the function using template specialisation if you want to tryParse to your own custom types.

Code:
#ifndef TRYPARSE_H
#define TRYPARSE_H

#include <string>
#include <sstream>

//! Try and parse a string to another type
//! \return true if the conversion was ok, false otherwise
template <typename T>
bool tryParse(
        const std::string &str,  //!< String to convert
        T &out                        //!< Output variable
        )
{
        std::stringstream sstream;
        sstream.exceptions(std::ios::failbit | std::ios::badbit);
        sstream << str;
        try { sstream >> out; }
        catch(std::exception&) { return false; }
        return true;
}

#endif
 
Status
Not open for further replies.

Users who are viewing this thread

Top