static bool is_of_type( cppcms::json::value const &v, T x ) { try { if( v.type( ) == cppcms::json::is_number ) { // we loose precision as ArithmenticType is float, but so what return true; } else if( v.type( ) == cppcms::json::is_string ) { T t = boost::lexical_cast<T>( v.str( ) ); (void)t; return true; } else { return false; } } catch( boost::bad_lexical_cast &e ) { return false; } }
static bool is_of_type( cppcms::json::value const &v, T x ) { try { if( v.type( ) == cppcms::json::is_number ) { double n; double d = std::modf( v.number( ), &n ); if( std::abs( d ) < std::numeric_limits<float>::epsilon( ) ) { // the fractional part is smaller than the machine epsilon // of float (right?), so it is an integer return true; } return false; } else if( v.type( ) == cppcms::json::is_string ) { T t = boost::lexical_cast<T>( v.str( ) ); (void)t; return true; } else { return false; } } catch( boost::bad_lexical_cast &e ) { return false; } }