cxx: Add experimental "easy" way to use wref

I hid it behind ifdef for now as I'm very much unsure of what I'm doing.
This whole modern C++ thing is still weird to me :)

Prerequisite:
 #define EFL_CXX_WREF_EASY

This allows constructs such as:

  auto wobj = obj._get_wref();
  std::cout << wobj->text_get() << std::endl;
This commit is contained in:
Jean-Philippe Andre 2017-11-02 18:39:47 +09:00
parent 73ec85aeff
commit e7009b77a2
2 changed files with 19 additions and 0 deletions

View File

@ -123,6 +123,18 @@ struct wref
return *this;
}
#ifdef EFL_CXX_WREF_EASY
T operator->() const {
if (!_eo_wref) return T(nullptr);
return T(detail::ref(_eo_wref));
}
T operator*() const {
if (!_eo_wref) return T(nullptr);
return T(detail::ref(_eo_wref));
}
#endif
private:
void _add()
{

View File

@ -174,6 +174,13 @@ struct class_definition_generator
"return ::efl::eo::wref<" << string << ">(*this); }\n"
).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false;
if(!as_generator("#ifdef EFL_CXX_WREF_EASY\n").generate(sink, attributes::unused, context)) return false;
if(!as_generator( scope_tab << "const " << string << "* operator->() const { return this; }\n"
).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false;
if(!as_generator( scope_tab << string << "* operator->() { return this; }\n"
).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false;
if(!as_generator("#endif \n").generate(sink, attributes::unused, context)) return false;
if(!as_generator( scope_tab << "::efl::eo::concrete const& _get_concrete() const { return *this; }\n"
<< scope_tab << "::efl::eo::concrete& _get_concrete() { return *this; }\n"
).generate(sink, attributes::unused, context)) return false;