|
CppWAMP
C++11 client library for the WAMP protocol
|
Concepts:
StaticVisitor is the C++ concept for a function object having operator() overloads that can take any of wamp::Variant's bound types as a parameter.
Given:
visitor: a StaticVisitor instance, and,bound: a reference to any of wamp::Variant's bound types (Null, Bool, Int, UInt, Real, String, Array, or Object),then the following expressions must be valid:
| Expression | Effect |
|---|---|
decltype(visitor)::ResultType | Yields the common type returned by all operator() overloads |
visitor(bound) | Returns a value of type decltype(visitor)::ResultType |
BinaryVisitor is the C++ concept for a function object having operator() overloads that take two arguments of wamp::Variant's bound types. The overloads must handle every combination of Variant's bound types. To avoid combinatorial explosion, the operator() overloads are typically template functions that perform compile-time pattern matching, using type traits and SFINAE.
Given:
visitor: a BinaryVisitor instance, and,left and right: two wamp::Variant bound type references,then the following expressions must be valid:
| Expression | Effect |
|---|---|
decltype(visitor)::ResultType | Yields the common type returned by all operator() overloads |
vis(left, right) | Returns a value of type decltype(visitor)::ResultType |
where left and right are references to any of Variant's bound types (Null, Bool, Int, UInt, Real, String, Array, or Object).
OperandVisitor is the C++ concept for a function object having operator() overloads that take two arguments. This concept is required for the applyWithOperand function. The operator() overloads must handle any of wamp::Variant's bound types as their first argument. They must also handle a value or reference of type O for their second argument, where O is the type of the operand argument passed to applyWithOperand.
Given:
visitor: an OperandVisitor instance,bound: a reference to any of wamp::Variant's bound types, and, (Null, Bool, Int, UInt, Real, String, Array, or Object)operand: an operand l-value or r-value reference,then the following expressions must be valid:
| Expression | Effect |
|---|---|
decltype(visitor)::ResultType | Yields the common type returned by all operator() overloads |
visitor(bound, operand) | Returns a value of type decltype(visitor)::ResultType |