Re: std::string vs other strings
Roman Kubiak <[email protected]> Tue, 13 Nov 2012 18:43:51 +0100
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <CACugK=bH_tBPcRRjXw=SoE+fqU=Vo0O7BjyymU4i97ir7LM=Wg@mail.gmail.com> |
I thought that maybe policies are for that. What i mean is to pass a policy
to the console() .def() call and say, don't convert the first parameter for
that function, just pass the reference to it. But i don't know how to do
that.
====================================================================
_ _ _ _ _ _
__ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| |
\ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` |
\_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_|
|___/
====================================================================
On Tue, Nov 13, 2012 at 6:27 PM, Roman Kubiak <[email protected]>wrote:
> My converter is pretty simple:
> namespace luabind
> {
> template <> struct default_converter<String> :
> native_converter_base<String>
> {
> static int compute_score(lua_State* L, int index)
> {
> _DBG("default_converter<String>::compute_score got userdata");
> return (lua_type(L, index) == LUA_TSTRING) ? 0 : -1;
> }
> String from(lua_State* L, int index)
> {
> _DBG("default_converter<String>::from from");
> return String(lua_tostring(L, index));
> }
> void to(lua_State* L, String const &value)
> {
> _DBG("default_converter<String>::from to");
> lua_pushlstring(L, value.toUTF8(), value.length());
> }
> };
>
> template <> struct default_converter<String const&> :
> default_converter<String>
> {
> };
> }
>
> When i do in lua:
> console("helo")
>
> i get this output:
> (25757538) default_converter<String>::compute_score got userdata
> (25757539.7) default_converter<String>::from from
> helo
>
> When i do:
> str = String("helo")
> console(str)
>
> i get this:
> (25807812.1) default_converter<String>::compute_score got userdata
> ERROR: No matching overload found, candidates:
> void console(String const&)
>
>
> ====================================================================
> _ _ _ _ _ _
> __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| |
> \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` |
> \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_|
> |___/
> ====================================================================
>
>
>
>
>
>
> On Tue, Nov 13, 2012 at 5:42 AM, Cory Riddell <[email protected]> wrote:
>
>> I don't have your String class, so I tried the same thing you describing
>> using MFC CStrings.
>>
>> In my C++ code, I defined the following:
>>
>> void console(const CString &textToPrint)
>> {
>> // write output to a debug window and echo it to a log file
>> printToOutput(std::string(textToPrint));
>> }
>>
>> CString getName()
>> {
>> return CString("my name");
>> }
>>
>> I bound them:
>> luabind::module(myLuaState) [
>> luabind::def("console", console),
>> luabind::def("getName", getName)
>> ];
>>
>> Then called them in a lua script:
>> console(getName())
>>
>> Everything seemed to work just fine. The string "my name" is written to
>> my debug window and echoed to my log file by my printToOutput function.
>>
>> Maybe post your converter definitions and how you are binding to lua.
>>
>> Cory
>>
>>
>> On 11/12/2012 12:59 PM, Roman Kubiak wrote:
>>
>> I got back to the problem and tried again with the conversion, i noticed
>> that it matters when the converter is defined in the include files, so now
>> i get the converter working, but too much.
>> i have a simple method that prints a string to the console defined as
>> void console (const String &textToPrint);
>> and i have loads of methods/functions that return a String() object for
>> example:
>> String getName() { return (String("my name")); }
>>
>> now when the converter is registered i can't do
>> console (getName())
>>
>> this causes an error saying there are no valid candidates for the
>> console call, i noticed that the converter is
>> using the compute_score() to determine if a String() object is a string
>> (lua_type(L, index) == LUA_TSTRING) and i'ts not
>> it's LUA_TUSERDATA, now if i return 1 in compute_score() the function
>> from() will be called but it will have the
>> String() object on the stack, and i can't convert it using
>> luabind::object() since it's object_cast<>() methos will
>> call the converter again, and it will loop forever.
>>
>> What's the solution to this ?
>>
>> ====================================================================
>> _ _ _ _ _ _
>> __ _____| | |_ __ _ __ _ ___ __ ___ _ _| |_ _ _ ___| | |___ __| |
>> \ V / _ \ | _/ _` / _` / -_) / _/ _ \ ' \ _| '_/ _ \ | / -_) _` |
>> \_/\___/_|\__\__,_\__, \___| \__\___/_||_\__|_| \___/_|_\___\__,_|
>> |___/
>> ====================================================================
>>
>>
>>
>>
>>
>>
>> On Mon, Nov 12, 2012 at 4:47 PM, Cory Riddell <[email protected]> wrote:
>>
>>> Thank you for the pointer. It ended up being incredibly simple. Here's
>>> my code for CString:
>>>
>>> namespace luabind
>>> {
>>> template <>
>>> struct default_converter<CString>
>>> : native_converter_base<CString>
>>> {
>>> static int compute_score(lua_State* L, int index)
>>> {
>>> return lua_type(L, index) == LUA_TSTRING ? 0 : -1;
>>> }
>>>
>>> CString from(lua_State* L, int index)
>>> {
>>> return CString(lua_tostring(L, index), lua_rawlen(L, index));
>>> }
>>>
>>> void to(lua_State* L, CString const& value)
>>> {
>>> lua_pushlstring(L, (LPCTSTR)value, value.GetLength());
>>> }
>>> };
>>>
>>> template <>
>>> struct default_converter<CString const>
>>> : default_converter<CString>
>>> {};
>>>
>>> template <>
>>> struct default_converter<CString const&>
>>> : default_converter<CString>
>>> {};
>>> }
>>>
>>>
>>> The only possible problem that I can see here is needing to convert from
>>> wchar_t to char (utf-8) when making a unicode build.
>>>
>>> Cory
>>>
>>>
>>>
>>> On 11/9/2012 3:35 PM, Willi Schinmeyer wrote:
>>> > The std::string converter seems to be defined in detail/policy.hpp:756
>>> > as a specialization of default_converter. I'd start my investigation
>>> there.
>>> >
>>> >
>>> ------------------------------------------------------------------------------
>>> > Everyone hates slow websites. So do we.
>>> > Make your web apps faster with AppDynamics
>>> > Download AppDynamics Lite for free today:
>>> > http://p.sf.net/sfu/appdyn_d2d_nov
>>> > _______________________________________________
>>> > luabind-user mailing list
>>> > [email protected]
>>> > https://lists.sourceforge.net/lists/listinfo/luabind-user
>>> >
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Everyone hates slow websites. So do we.
>>> Make your web apps faster with AppDynamics
>>> Download AppDynamics Lite for free today:
>>> http://p.sf.net/sfu/appdyn_d2d_nov
>>> _______________________________________________
>>> luabind-user mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/luabind-user
>>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Monitor your physical, virtual and cloud infrastructure from a single
>> web console. Get in-depth insight into apps, servers, databases, vmware,
>> SAP, cloud infrastructure, etc. Download 30-day Free Trial.
>> Pricing starts from $795 for 25 servers or applications!http://p.sf.net/sfu/zoho_dev2dev_nov
>>
>>
>>
>> _______________________________________________
>> luabind-user mailing [email protected]://lists.sourceforge.net/lists/listinfo/luabind-user
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Monitor your physical, virtual and cloud infrastructure from a single
>> web console. Get in-depth insight into apps, servers, databases, vmware,
>> SAP, cloud infrastructure, etc. Download 30-day Free Trial.
>> Pricing starts from $795 for 25 servers or applications!
>> http://p.sf.net/sfu/zoho_dev2dev_nov
>> _______________________________________________
>> luabind-user mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/luabind-user
>>
>>
>
------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user