mirror of
				https://github.com/dolphin-emu/dolphin.git
				synced 2025-10-24 17:09:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			31 lines
		
	
	
	
		
			996 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
	
		
			996 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2018 Dolphin Emulator Project
 | |
| // Licensed under GPLv2+
 | |
| // Refer to the license.txt file included.
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <variant>
 | |
| 
 | |
| namespace Common
 | |
| {
 | |
| template <typename ResultCode, typename T>
 | |
| class Result final
 | |
| {
 | |
| public:
 | |
|   Result(ResultCode code) : m_variant{code} {}
 | |
|   Result(const T& t) : m_variant{t} {}
 | |
|   Result(T&& t) : m_variant{std::move(t)} {}
 | |
|   explicit operator bool() const { return Succeeded(); }
 | |
|   bool Succeeded() const { return std::holds_alternative<T>(m_variant); }
 | |
|   // Must only be called when Succeeded() returns false.
 | |
|   ResultCode Error() const { return std::get<ResultCode>(m_variant); }
 | |
|   // Must only be called when Succeeded() returns true.
 | |
|   const T& operator*() const { return std::get<T>(m_variant); }
 | |
|   const T* operator->() const { return &std::get<T>(m_variant); }
 | |
|   T& operator*() { return std::get<T>(m_variant); }
 | |
|   T* operator->() { return &std::get<T>(m_variant); }
 | |
| 
 | |
| private:
 | |
|   std::variant<ResultCode, T> m_variant;
 | |
| };
 | |
| }  // namespace Common
 |