Implicit conversions for put/get - #5056
Conversation
96b8998 to
748be8b
Compare
| EXPECT_THROW(obj->get<float64_t>(MockObject::kInt), ShogunException); | ||
| EXPECT_THROW(obj->get(Tag<float64_t>(MockObject::kInt)), ShogunException); | ||
| EXPECT_EQ(obj->get<float64_t>(MockObject::kInt), 10.0); | ||
| EXPECT_EQ(obj->get(Tag<float64_t>(MockObject::kInt)), 10.0); |
There was a problem hiding this comment.
yep.
But everything that looses information throws?
maybe a test for some examples?
There was a problem hiding this comment.
by lose information you mean something like 1.3 becomes 1? Right now I think this function only supports checks for overflow, e.g. int -10 is converted to unsigned int.
There was a problem hiding this comment.
Yes, we wouldnt want that to happen for now I think.
There was a problem hiding this comment.
@vigsterkr would it make sense to extend safe_convert to check floating point casting to integers and see if the delta is larger than fepsilon?
There was a problem hiding this comment.
I always thought that the safe_convert functions would be for overflow checks, not for loss of information when going from discrete to floating?
There was a problem hiding this comment.
(on the other hand, why not :) )
748be8b to
8efeb15
Compare
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
Implicit conversions as discussed in #5045. Would have to add all the primitive types, and probably come up with some better abstraction. This does the same as the Any::CastingRegistry, but by putting all this logic in SGObject we can add some very specific edge cases, like
std::variant. I think this separatesAnyas a "type safe" type erasure abstraction from the parameters that use it.