Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers StaticInterface.h Source File

StaticInterface.h

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2019 ARM Limited
00003  * SPDX-License-Identifier: Apache-2.0
00004  *
00005  * Licensed under the Apache License, Version 2.0 (the "License");
00006  * you may not use this file except in compliance with the License.
00007  * You may obtain a copy of the License at
00008  *
00009  *     http://www.apache.org/licenses/LICENSE-2.0
00010  *
00011  * Unless required by applicable law or agreed to in writing, software
00012  * distributed under the License is distributed on an "AS IS" BASIS,
00013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  * See the License for the specific language governing permissions and
00015  * limitations under the License.
00016  */
00017 
00018 #ifndef BLE_COMMON_STATICINTERFACE_H
00019 #define BLE_COMMON_STATICINTERFACE_H
00020 
00021 namespace ble {
00022 
00023 /**
00024  * Static Interface helper class.
00025  *
00026  * @tparam Impl Implementation class.
00027  * @tparam Interface Interface template
00028  */
00029 template <typename Impl, template<typename> class Interface>
00030 struct StaticInterface
00031 {
00032     /**
00033      * @return A pointer to the implementation class.
00034      */
00035     Impl* impl ()
00036     {
00037         return static_cast<Impl*>(this);
00038     }
00039 
00040     /**
00041      * @return A pointer to the implementation class.
00042      */
00043     const Impl* impl () const
00044     {
00045         return static_cast<const Impl*>(this);
00046     }
00047 
00048 private:
00049     StaticInterface() {}
00050     friend Interface<Impl>;
00051 };
00052 
00053 } // namespace ble
00054 
00055 #endif //BLE_COMMON_STATICINTERFACE_H