Facebook
From Capacious Monkey, 3 Years ago, written in C++.
This paste is a reply to c++ from Cygan - view diff
Embed
Download Paste or View Raw
Hits: 192
  1.  
  2. #include <variant>
  3. #include <string>
  4.  
  5. namespace sa {
  6.     struct MamsDisabled {
  7.     };
  8.  
  9.     struct MamsExternal {
  10.         std::string url;
  11.     };
  12.  
  13.     struct MamsStub {
  14.         bool persistent;
  15.     };
  16.  
  17.     struct SomeApiParams {
  18.         std::variant<MamsDisabled, MamsExternal, MamsStub> mamsMode;
  19.     };
  20.  
  21.     struct SomeApiResult {
  22.     };
  23.  
  24.     SomeApiResult someApi(const SomeApiParams& params);
  25. }
  26.  
  27. int main() {
  28.     sa::someApi(sa::SomeApiParams{sa::MamsExternal{"http://example.org/mams"}});
  29.     return 0;
  30. }
  31.  
  32. namespace sa {
  33.     SomeApiResult someApi(const SomeApiParams& params) {
  34.         struct MamsModeVisitor {
  35.             SomeApiResult operator()(const MamsDisabled&) {
  36.                 return SomeApiResult();
  37.             }
  38.  
  39.             SomeApiResult operator()(const MamsStub& mamsMode) {
  40.                 if (mamsMode.persistent) {
  41.                    
  42.                 }
  43.                 return SomeApiResult();
  44.             }
  45.  
  46.             SomeApiResult operator()(const MamsExternal& mamsMode) {
  47.                 std::string url = mamsMode.url;
  48.                 return SomeApiResult();
  49.             }
  50.         };
  51.  
  52.         return std::visit(MamsModeVisitor(), params.mamsMode);
  53.     }
  54. }
captcha