JSON for Modern C++ 3.10.4

◆ get_ptr() [1/2]

template<template< typename U, typename V, typename... Args > class ObjectType = std::map, template< typename U, typename... Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template< typename U > class AllocatorType = std::allocator, template< typename T, typename SFINAE=void > class JSONSerializer = adl_serializer, class BinaryType = std::vector<std::uint8_t>>
template<typename PointerType , typename std::enable_if< std::is_pointer< PointerType >::value &&std::is_const< typename std::remove_pointer< PointerType >::type >::value, int >::type = 0>
constexpr auto nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType >::get_ptr ( ) const -> decltype(std::declval<const basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))
inlineconstexprnoexcept

get a pointer value (implicit) Implicit pointer access to the internally stored JSON value. No copies are made.

Warning
Writing data to the pointee of the result yields an undefined state.
Template Parameters
PointerTypepointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, number_unsigned_t, or number_float_t. Enforced by a static assertion.
Returns
pointer to the internally stored JSON value if the requested pointer type PointerType fits to the JSON value; nullptr otherwise
Complexity
Constant.
Example
The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.
1#include <iostream>
2#include <nlohmann/json.hpp>
3
4using json = nlohmann::json;
5
6int main()
7{
8 // create a JSON number
9 json value = 17;
10
11 // explicitly getting pointers
12 auto p1 = value.get_ptr<const json::number_integer_t*>();
13 auto p2 = value.get_ptr<json::number_integer_t*>();
14 auto p3 = value.get_ptr<json::number_integer_t* const>();
15 auto p4 = value.get_ptr<const json::number_integer_t* const>();
16 auto p5 = value.get_ptr<json::number_float_t*>();
17
18 // print the pointees
19 std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\n';
20 std::cout << std::boolalpha << (p5 == nullptr) << '\n';
21}
ValueType value(const typename object_t::key_type &key, const ValueType &default_value) const
access specified object element with default value
Definition: json.hpp:21500
NumberIntegerType number_integer_t
a type for a number (integer)
Definition: json.hpp:18212
NumberFloatType number_float_t
a type for a number (floating-point)
Definition: json.hpp:18351
basic_json<> json
default JSON class
Definition: json.hpp:3472

Output (play with this example online):
17 17 17 17
true
The example code above can be translated with
g++ -std=c++11 -Isingle_include doc/examples/get_ptr.cpp -o get_ptr 
Since
version 1.0.0

Definition at line 20520 of file json.hpp.