| 15 | typename Generator, |
| 16 | typename = std::enable_if_t<std::is_same<std::shared_ptr<T>, decltype(std::declval<Generator>()())>::value>> |
| 17 | ThreadLocalObject(rtc::Thread *thread, Generator &&generator) : |
| 18 | _thread(thread), |
| 19 | _valueHolder(std::make_unique<ValueHolder>()) { |
| 20 | assert(_thread != nullptr); |
| 21 | _thread->PostTask([valueHolder = _valueHolder.get(), generator = std::forward<Generator>(generator)]() mutable { |
| 22 | valueHolder->_value = generator(); |
| 23 | }); |
| 24 | } |
| 25 | |
| 26 | ~ThreadLocalObject() { |
| 27 | _thread->PostTask([valueHolder = std::move(_valueHolder)](){ |