Typedefs for struct members?
-
Key: CPP12-43
-
Legacy Issue Number: 4344
-
Status: closed
-
Source: Triodia Technologies Pty Ltd ( Michi Henning)
-
Summary:
I recently got a query from a customer. Basically, they have a CORBA system
that interfaces to some legacy library. Lots of structures are being passed
back and forth, many of which contain strings; these need to be passed
as char * or as std::string, depending on where they go.So, the customer defined conversion functions that correctly copied a
std::string or char * into and out of a string member (using string_dup()
or whatever, as appropriate). The problem is that they have to use
an undefined type name as the type of the parameter. For example:void copy(const std::string & from, CORBA::string_mgr & to);
Of course, "string_mgr" is a mapping-internal type name and therefore the
code is non-portable.I don't see an easy work-around that would be within the current mapping.
I could use a function that accepts a reference to a struct instead of
the string inside the struct, but that then means that I need a different
function for each structure type. Or I can write macros that are specific
to each ORB to handle it (but that is truly ugly and breaks if the vendor
decides to tinker with the internals of their mapping).One way around it all would be to require a typedef to be generated for
string members. For example:// IDL
{ string s; }
struct Foo;
// C++
namespace CORBA {
{ /* ... */ }
// ...
class string_mgr; // Mapping-internal class
typedef string_mgr string_member; // New standard name
};struct Foo
{ CORBA::string_mgr s; // Mapping-internal type name };
This would allow me to portably pass a string member to a function because
the mapping would guarantee the existence of a type named "string_member"
(or whatever name we can settle on).void copy(const std::string & from, CORBA::string_member & to);
(Depending on the mapping implementation, there may be similar issues for
other types, such as references or arrays. If there are such mappings,
we'd need typedefs for those too.)Basically, wherever a type name that is internal to the mapping can appear,
we end up with this kind of problem – I can't pass a value of that type
because I don't know the type name. I'd like to fix that, if possible. -
Reported: CPP 1.1 — Fri, 15 Jun 2001 04:00 GMT
-
Disposition: Resolved — CPP 1.2
-
Disposition Summary:
rejected
-
Updated: Fri, 6 Mar 2015 21:38 GMT