openPMD-api
include
openPMD
auxiliary
DerefDynamicCast.hpp
1
/* Copyright 2020-2021 Axel Huebl
2
*
3
* This file is part of openPMD-api.
4
*
5
* openPMD-api is free software: you can redistribute it and/or modify
6
* it under the terms of of either the GNU General Public License or
7
* the GNU Lesser General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* openPMD-api is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License and the GNU Lesser General Public License
15
* for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* and the GNU Lesser General Public License along with openPMD-api.
19
* If not, see <http://www.gnu.org/licenses/>.
20
*/
21
#pragma once
22
23
#include <exception>
24
25
namespace
openPMD
26
{
27
namespace
auxiliary
28
{
41
template
<
typename
New_Type,
typename
Old_Type>
42
inline
New_Type &deref_dynamic_cast(Old_Type *ptr)
43
{
44
auto
const
tmp_ptr =
dynamic_cast<
New_Type *
>
(ptr);
45
if
(tmp_ptr ==
nullptr
)
46
throw
std::runtime_error(
"Dynamic cast returned a nullptr!"
);
47
return
*tmp_ptr;
48
}
49
50
}
// namespace auxiliary
51
}
// namespace openPMD
openPMD
Public definitions of openPMD-api.
Generated by
1.8.13