Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Our atomic operations have prototypes like
These need to be stored during the entire multimesh traversal so that compound operations can extract information from the last operation on any particular mesh. Because this involves different input and output types it's better to use
std::variant
- but the input types are all references so some manipulation aroundstd::reference_wrapper
is needed. This PR provides a somewhat ugly interface that will be kept internal for executing on generic variants.A key function here is the implied ability to call
as_variant<Traits>(Mesh&)
that returns astd::variant<EdgeMesh&,TriMesh&,TetMesh&>
so we can just callIf we use Functor classes (as seen in unit tests) then users can create custom multimesh visitors using functor structs + polymorphism and even cache the return types.