123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /*
- * Copyright (c) 2016 The ZLToolKit project authors. All Rights Reserved.
- *
- * This file is part of ZLToolKit(https://github.com/ZLMediaKit/ZLToolKit).
- *
- * Use of this source code is governed by MIT license that can be found in the
- * LICENSE file in the root of the source tree. All contributing project authors
- * may be found in the AUTHORS file in the root of the source tree.
- */
- #ifndef UTIL_ONCETOKEN_H_
- #define UTIL_ONCETOKEN_H_
- #include <functional>
- #include <type_traits>
- namespace toolkit {
- class onceToken {
- public:
- using task = std::function<void(void)>;
- template<typename FUNC>
- onceToken(const FUNC &onConstructed, task onDestructed = nullptr) {
- onConstructed();
- _onDestructed = std::move(onDestructed);
- }
- onceToken(std::nullptr_t, task onDestructed = nullptr) {
- _onDestructed = std::move(onDestructed);
- }
- ~onceToken() {
- if (_onDestructed) {
- _onDestructed();
- }
- }
- private:
- onceToken() = delete;
- onceToken(const onceToken &) = delete;
- onceToken(onceToken &&) = delete;
- onceToken &operator=(const onceToken &) = delete;
- onceToken &operator=(onceToken &&) = delete;
- private:
- task _onDestructed;
- };
- } /* namespace toolkit */
- #endif /* UTIL_ONCETOKEN_H_ */
|