meta: reduce the size of the erased conversion function
This commit is contained in:
@@ -231,8 +231,8 @@ public:
|
||||
using conv_type = std::remove_cv_t<std::remove_reference_t<std::invoke_result_t<decltype(Candidate), Type &>>>;
|
||||
|
||||
internal::meta_conv_node node{
|
||||
+[](const meta_any &instance) {
|
||||
return forward_as_meta(std::invoke(Candidate, *static_cast<const Type *>(instance.data())));
|
||||
+[](const void *instance) {
|
||||
return forward_as_meta(std::invoke(Candidate, *static_cast<const Type *>(instance)));
|
||||
}};
|
||||
|
||||
internal::meta_extend(owner(), type_id<conv_type>().hash(), std::move(node));
|
||||
@@ -253,8 +253,8 @@ public:
|
||||
using conv_type = std::remove_cv_t<std::remove_reference_t<To>>;
|
||||
|
||||
internal::meta_conv_node node{
|
||||
+[](const meta_any &instance) {
|
||||
return forward_as_meta(static_cast<To>(*static_cast<const Type *>(instance.data())));
|
||||
+[](const void *instance) {
|
||||
return forward_as_meta(static_cast<To>(*static_cast<const Type *>(instance)));
|
||||
}};
|
||||
|
||||
internal::meta_extend(owner(), type_id<conv_type>().hash(), std::move(node));
|
||||
|
||||
@@ -1449,7 +1449,7 @@ bool meta_any::set(const id_type id, Type &&value) {
|
||||
|
||||
if(node.details) {
|
||||
if(auto it = node.details->conv.find(type.info().hash()); it != node.details->conv.cend()) {
|
||||
return it->second.conv(*this);
|
||||
return it->second.conv(data());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ struct meta_base_node {
|
||||
};
|
||||
|
||||
struct meta_conv_node {
|
||||
meta_any (*conv)(const meta_any &){};
|
||||
meta_any (*conv)(const void *){};
|
||||
};
|
||||
|
||||
struct meta_ctor_node {
|
||||
|
||||
Reference in New Issue
Block a user