12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // Tencent is pleased to support the open source community by making Mars available.
- // Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved.
- // Licensed under the MIT License (the "License"); you may not use this file except in
- // compliance with the License. You may obtain a copy of the License at
- // http://opensource.org/licenses/MIT
- // Unless required by applicable law or agreed to in writing, software distributed under the License is
- // distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
- // either express or implied. See the License for the specific language governing permissions and
- // limitations under the License.
- //============================================================================
- // Name : has_member.h
- // Author :
- // Version :
- // Copyright : Your copyright notice
- // Description : Hello World in C++, Ansi-style
- //============================================================================
- #ifndef COMM_HAS_MEMBER_H_
- #define COMM_HAS_MEMBER_H_
- template <bool TYPE>
- struct bool_type {
- };
- #define DEFINE_HAS_MEMBER_WITH_TYPE(member_name, member_type) \
- template <typename T>\
- class has_##member_name {\
- private:\
- struct yes_type { char x[1]; };\
- struct no_type { char x[2]; };\
- template <member_type (T::*)> struct tester;\
- template <typename U> static yes_type test(tester<&U::member_name>*);\
- template <typename U> static no_type test(...);\
- public:\
- static const bool value = (sizeof(test<T>(0)) == sizeof(yes_type));\
- };
- #define DEFINE_HAS_MEMBER(member_name) \
- template <typename T>\
- class has_##member_name {\
- private:\
- struct yes_type { char x[1]; };\
- struct no_type { char x[2]; };\
- template <int> struct tester;\
- template <typename U> static yes_type test(tester<sizeof(&U::member_name)>*);\
- template <typename U> static no_type test(...);\
- public:\
- static const bool value = (sizeof(test<T>(0)) == sizeof(yes_type));\
- };
- #endif
|