digitalmars.D.learn - C++ operator overloading to D
- BLS (22/22) Sep 22 2007 Hi,
- Bill Baxter (14/42) Sep 22 2007 Basically you can't until D gets something like opImplicitCast.
- BLS (15/65) Sep 22 2007 Sorry, I don't understand. But before I ask for more information, I'll
- Bill Baxter (19/83) Sep 22 2007 operator SOMETYPE() in C++ is a casting/conversion operator.
Hi, I have a small problem in translating C++ operator overloading to D // Allready translated C++ stuff class CFont { public: HFONT m_hFont; this(HFONT hFont = NULL) { m_hFont = hFont; } ~this() { if(m_hFont !is NULL && !DeleteObject(m_hFont)) m_hFont = NULL; } // TODO How to translate this C++ construct into D operator HFONT() {return m_hFont;} // That's the problem. Sorry have not found anything related in the docs. Some ideas;;; Many thanks in advance. Bjoern
Sep 22 2007
BLS wrote:Hi, I have a small problem in translating C++ operator overloading to D // Allready translated C++ stuff class CFont { public: HFONT m_hFont; this(HFONT hFont = NULL) { m_hFont = hFont; } ~this() { if(m_hFont !is NULL && !DeleteObject(m_hFont)) m_hFont = NULL; } // TODO How to translate this C++ construct into D operator HFONT() {return m_hFont;} // That's the problem. Sorry have not found anything related in the docs. Some ideas;;; Many thanks in advance. BjoernBasically you can't until D gets something like opImplicitCast. What that does is allow the CFont class to be used in contexts where an HFONT is expected. so you need to make it into a function that explicity does the cast. Such as: HFONT hfont() {return m_hFont;} or name it to_HFONT() or as_hfont() or whatever tickles your fancy. This is one of the bigger pains of translating C++ code to D -- the repercussions of not having something like opImplicitCast. Chances are the original code will be passing CFonts around as HFONTS willy-nilly. So you're going to have to add a lot of ".hfont"s here and there to make the translated code compile. --bb
Sep 22 2007
Bill Baxter schrieb:BLS wrote:Sorry, I don't understand. But before I ask for more information, I'll study the C++ code again.Hi, I have a small problem in translating C++ operator overloading to D // Allready translated C++ stuff class CFont { public: HFONT m_hFont; this(HFONT hFont = NULL) { m_hFont = hFont; } ~this() { if(m_hFont !is NULL && !DeleteObject(m_hFont)) m_hFont = NULL; } // TODO How to translate this C++ construct into D operator HFONT() {return m_hFont;} // That's the problem. Sorry have not found anything related in the docs. Some ideas;;; Many thanks in advance. BjoernBasically you can't until D gets something like opImplicitCast. What that does is allow the CFont class to be used in contexts where an HFONT is expected. so you need to make it into a function that explicity does the cast. Such as: HFONT hfont() {return m_hFont;} or name it to_HFONT() or as_hfont() or whatever tickles your fancy.This is one of the bigger pains of translating C++ code to D -- the repercussions of not having something like opImplicitCast. Chances are the original code will be passing CFonts around as HFONTS willy-nilly. So you're going to have to add a lot of ".hfont"s here and there to make the translated code compile. --bbOuch! Any plans for opImplicitCast in D 2 ? A bit off topic Bill, you have just translated a huge C++ project. Can you tell us a bit about your experience, problems, tricks ...probabely on D WIKI. I am going to translate about 15000 LOC (99 percent template free, thanks man) and I know about at least 2 guys working on bigger C++ to D projects. I have allready suggested to open a new forum "porting C++" but the feedback was not really enthusiastic, to say the least. However, I am pretty sure that information regarding porting C++ to D is a matter of interest. Bjoern
Sep 22 2007
BLS wrote:Bill Baxter schrieb:operator SOMETYPE() in C++ is a casting/conversion operator. http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=24&rl=1 So with your example, given some API like SetFont(HFONT font); That operator HFONT makes it so you can pass a CFont to that function as if it were an HFONT. CFont mycfont; ... SetFont(mycfont); // first calls operator HFONT() and passes result to SetFontBLS wrote:Sorry, I don't understand. But before I ask for more information, I'll study the C++ code again.Hi, I have a small problem in translating C++ operator overloading to D // Allready translated C++ stuff class CFont { public: HFONT m_hFont; this(HFONT hFont = NULL) { m_hFont = hFont; } ~this() { if(m_hFont !is NULL && !DeleteObject(m_hFont)) m_hFont = NULL; } // TODO How to translate this C++ construct into D operator HFONT() {return m_hFont;} // That's the problem. Sorry have not found anything related in the docs. Some ideas;;; Many thanks in advance. BjoernBasically you can't until D gets something like opImplicitCast. What that does is allow the CFont class to be used in contexts where an HFONT is expected. so you need to make it into a function that explicity does the cast. Such as: HFONT hfont() {return m_hFont;} or name it to_HFONT() or as_hfont() or whatever tickles your fancy.Apparently so according to WalterAndrei.pdf.This is one of the bigger pains of translating C++ code to D -- the repercussions of not having something like opImplicitCast. Chances are the original code will be passing CFonts around as HFONTS willy-nilly. So you're going to have to add a lot of ".hfont"s here and there to make the translated code compile. --bbOuch! Any plans for opImplicitCast in D 2 ?A bit off topic Bill, you have just translated a huge C++ project. Can you tell us a bit about your experience, problems, tricks ...probabely on D WIKI.I was thinking about it, but I wasn't sure if anyone would be interested.I am going to translate about 15000 LOC (99 percent template free, thanks man) and I know about at least 2 guys working on bigger C++ to D projects. I have allready suggested to open a new forum "porting C++" but the feedback was not really enthusiastic, to say the least.To me the D newsgroup is a fine place to discuss porting issues. And a wiki with advice would be nice -- especially for people who want to port something but don't really know C++ that well to begin with.However, I am pretty sure that information regarding porting C++ to D is a matter of interest.Well, if you think so I can jot down some of my observations about porting from C++ to D on wiki4d. --bb
Sep 22 2007