<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"><head><!--[if gte mso 9]><xml><o:OfficeDocumentSettings><o:AllowPNG/><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml><![endif]--></head><body><div style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:16px;"><div style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:16px;"><div><div>Single inheritance languages like Java and C# utilize <i>interfaces</i> extensively. Python 2.7+ handles the same concept with abstract base classes, ABCs.<br><div><br><div><div><div>Is there any interest in supporting<i> interfaces</i> in VTK via multiple inheritance from abstract classes (which do not inherit from vtkObject) while retaining the single inheritance model?<br><div><br>In my view there are good reasons to do so. For example vtkCell has methods like GetNumberOfEdges(), <span>GetEdge(),</span> GetNumberOfFaces(), GetFace() etc. which really only apply to multi-dimensional cells (both linear and non-linear); i.e. not points and lines. These methods are forced on the base class design by a single inheritance structure and the linear/non-linear cell sub-types. In my view it would be better if they were distributed across the sub-classes via the concept of interfaces. So I'm suggesting a limited use of multiple inheritance here, not a free-for-all approach. What do others think about this?<br><div><div><div><div><br></div>For an example please see this merge request <a href="https://gitlab.kitware.com/vtk/vtk/merge_requests/4372" rel="nofollow" target="_blank" class="enhancr_card_0550150209">Add missing size hints and bug fix point arrays for non-linear cells (!4372) · Merge Requests · VTK / VTK</a></div></div></div></div></div></div><div><br></div><div id="ydpec705842enhancr_card_0550150209" class="ydpec705842yahoo-link-enhancr-card ydpec705842ymail-preserve-class ydpec705842ymail-preserve-style" style="max-width:400px;font-family:"Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;" data-url="https://gitlab.kitware.com/vtk/vtk/merge_requests/4372" data-type="YENHANCER" data-size="MEDIUM" contenteditable="false"><a href="https://gitlab.kitware.com/vtk/vtk/merge_requests/4372" style="text-decoration:none !important;color:#000 !important;" class="ydpec705842yahoo-enhancr-cardlink" rel="nofollow" target="_blank"><table class="ydpec705842card-wrapper ydpec705842yahoo-ignore-table" style="max-width:400px;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td width="400"><table class="ydpec705842card ydpec705842yahoo-ignore-table" style="max-width:400px;border-width:1px;border-style:solid;border-color:rgb(224, 228, 233);border-radius:2px;" width="100%" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="ydpec705842card-primary-image-cell" style="background-color: rgb(0, 0, 0); background-repeat: no-repeat; background-size: cover; position: relative; border-radius: 2px 2px 0px 0px; min-height: 175px;" valign="top" height="175" background="https://s.yimg.com/lo/api/res/1.2/hRS7K7svOTtDkV..yyh3rA--~A/Zmk9ZmlsbDt3PTQwMDtoPTIwMDthcHBpZD1pZXh0cmFjdA--/https://gitlab.kitware.com/uploads/-/system/project/avatar/13/vtk_logo-main1.png.cf.jpg" bgcolor="#000000"><!--[if gte mso 9]><v:rect fill="true" stroke="false" style="width:396px;height:175px;position:absolute;top:0;left:0;"><v:fill type="frame" color="#000000" src="https://s.yimg.com/lo/api/res/1.2/hRS7K7svOTtDkV..yyh3rA--~A/Zmk9ZmlsbDt3PTQwMDtoPTIwMDthcHBpZD1pZXh0cmFjdA--/https://gitlab.kitware.com/uploads/-/system/project/avatar/13/vtk_logo-main1.png.cf.jpg"/></v:rect><![endif]--><table class="ydpec705842card-overlay-container-table ydpec705842yahoo-ignore-table" style="width:100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="ydpec705842card-overlay-cell" style="background-color: transparent; border-radius: 2px 2px 0px 0px; min-height: 175px;" valign="top" background="https://s.yimg.com/cv/ae/nq/storm/assets/enhancrV21/1/enhancr_gradient-400x175.png" bgcolor="transparent"><!--[if gte mso 9]><v:rect fill="true" stroke="false" style="width:396px;height:175px;position:absolute;top:-18px;left:0;"><v:fill type="pattern" color="#000000" src="https://s.yimg.com/cv/ae/nq/storm/assets/enhancrV21/1/enhancr_gradient-400x175.png"/><v:textbox inset="0,0,20px,0"><![endif]--><table class="ydpec705842yahoo-ignore-table" style="width: 100%; min-height: 175px;" height="175" border="0"><tbody><tr><td class="ydpec705842card-richInfo2" style="text-align:left;padding:15px 0 0 15px;vertical-align:top;"></td><td class="ydpec705842card-actions" style="text-align:right;padding:15px 15px 0 0;vertical-align:top;"><div class="ydpec705842card-share-container"></div></td></tr></tbody></table><!--[if gte mso 9]></v:textbox></v:rect><![endif]--></td></tr></tbody></table></td></tr><tr><td><table class="ydpec705842card-info ydpec705842yahoo-ignore-table" style="background-color: rgb(255, 255, 255); background-image: none; background-repeat: repeat; background-attachment: scroll; background-size: auto auto; position: relative; z-index: 2; width: 100%; max-width: 400px; border-radius: 0px 0px 2px 2px; border-top: 1px solid rgb(224, 228, 233);" border="0" cellspacing="0" cellpadding="0" align="center"><tbody><tr><td style="background-color:#ffffff;padding:16px 0 16px 12px;vertical-align:top;border-radius:0 0 0 2px;"></td><td style="vertical-align:middle;padding:12px 24px 16px 12px;width:99%;font-family:"Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;border-radius:0 0 2px 0;"><h2 class="ydpec705842card-title" style="font-size:14px;line-height:19px;margin:0 0 6px 0;font-family:"Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;word-break:break-word;color:#26282a;">Add missing size hints and bug fix point arrays for non-linear cells (!4...</h2><p class="ydpec705842card-description" style="font-size:12px;line-height:16px;margin:0px;color:#979ba7;word-break:break-word;">I've added size hints for concrete public methods GetParametricCoords(), GetEdgePoints() and GetFacePoints() in ...</p></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></a></div><div><br></div><div><br></div></div></div></div><div><br></div><div class="ydp7083d2e0signature"><div style="font-size:16px;font-family:Helvetica, Arial, sans-serif;"><div>Todd Martin, PhD.<br></div><div><i>Freelance Engineer/Software Architect.</i></div><br></div></div></div></div></div></body></html>