Implement SystemSet for BoxedSystemSet#8839
Closed
yyogo wants to merge 1 commit intobevyengine:mainfrom
Closed
Conversation
Add `.into_boxed()` trait method to keep `IntoSystemSetConfig` specialization
Member
alice-i-cecile
left a comment
There was a problem hiding this comment.
I think enabling this sort of use case is important, but we've had troubles with this sort of thing before causing subtle confusion and ergonomics issues. Can you explain what you mean by "non-dispatchable"?
Contributor
Author
I just mean a trait method with a I've updated the description a bit, hope my reasoning is clearer. Can you point me to a similar case that caused trouble in the past? |
Member
|
#8436 was the case I was thinking of :) Thanks for the clearer description! |
Contributor
Author
|
Ah, I see. I'll take a closer look and set this to draft in the meantime |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Objective
Solution
Explicitly implement
SystemSet(implyingIntoSystemSet) forBoxedSystemSetRationale
BoxedSystemSetdoesn't "need" to implementSystemSetbecause you can call the methods on the trait object reference. However, that means it can't beIntoSystemSet, since it can't unwrap the internal type, and you can't call.into_system_set(self)ondyn SystemSet, because it isn't sized.The trivial solution is to
impl SystemSet for Box<dyn SystemSet>. But that introduces a problem becauseIntoSystemSetConfigis implemented separately forSystemSetandBoxedSystemSet, and forSystemSetit boxes it before passing to the constructor. So to avoid this double-boxing I just added a defaultinto_boxed()method that turns a normal, non-trait-object system set into aBoxedSystemSet, and override it forBoxedSystemSetto just return itself.