Add type_conversion helper and failing unit test

This commit is contained in:
Jason Turner 2014-11-02 14:08:57 -07:00
parent dd12785b72
commit 20c0e6016e
3 changed files with 25 additions and 1 deletions

View File

@ -394,6 +394,19 @@ namespace chaiscript
return std::make_shared<detail::Type_Conversion_Impl<decltype(func)>>(user_type<From>(), user_type<To>(), func);
}
template<typename From, typename To>
Type_Conversion type_conversion()
{
static_assert(std::is_convertible<From, To>::value, "Types are not automatically convertible");
auto func = [](const Boxed_Value &t_bv) -> Boxed_Value {
// not even attempting to call boxed_cast so that we don't get caught in some call recursion
auto to = To{detail::Cast_Helper<const From &>::cast(t_bv, nullptr)};
return chaiscript::Boxed_Value(std::move(to));
};
return std::make_shared<detail::Type_Conversion_Impl<decltype(func)>>(user_type<From>(), user_type<To>(), func);
}
}

View File

@ -28,7 +28,8 @@ class Type2
{
public:
Type2(TestBaseType t_bt)
: m_bt(std::move(t_bt))
: m_bt(std::move(t_bt)),
m_str("Hello World")
{
}
@ -37,8 +38,14 @@ class Type2
return m_bt.val;
}
const char *get_str() const
{
return m_str.c_str();
}
private:
TestBaseType m_bt;
std::string m_str;
};
enum TestEnum
@ -158,6 +165,9 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_test_mo
m->add(chaiscript::type_conversion<TestBaseType, Type2>([](const TestBaseType &t_bt) { return Type2(t_bt); }));
m->add(chaiscript::fun(&Type2::get_val), "get_val");
m->add(chaiscript::fun(&Type2::get_str), "get_str");
m->add(chaiscript::type_conversion<const char *, std::string>());
return m;
}

View File

@ -7,3 +7,4 @@ auto t := TestBaseType();
// "get_val()" which exists on the Type2 type
assert_equal(t.get_val(), 10);
assert_equal(t.get_str().size(), 11);