<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
revise "base classes" -> "interface classes"<br>
<br>
<div class="moz-cite-prefix">On 07/02/2018 04:04 PM, Paul Douglas
Hahn wrote:<br>
</div>
<blockquote type="cite"
cite="mid:fe4e89e5-1134-3ad3-19b5-9dc84a238c82@compintensehpc.com">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Just one caveat (you probably already know and agree with this).
In my experience using C++ multiple inheritance, I think you
should try to avoid situations where you have common base classes
in the inheritance pathways. Virtual base classes are the usual
recommendation to resolve certain problems that arise in such
cases, but IMHO having experience with that, I generally recommend
against it.<br>
<br>
So I recommend your base classes should be of the "<u>mix-in</u>"
interface category, not relaying on any common base class. The
approach works fine for me in almost every situation.<br>
<br>
- Paul<br>
<br>
<div class="moz-cite-prefix">On 07/02/2018 12:44 AM, Todd Martin
via vtk-developers wrote:<br>
</div>
<blockquote type="cite"
cite="mid:486556535.1248987.1530510262667@mail.yahoo.com"><!--[if gte mso 9]><xml><o:OfficeDocumentSettings><o:AllowPNG/><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml><![endif]-->
<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"
moz-do-not-send="true">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"
moz-do-not-send="true">
<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;" 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"
valign="top" 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;"
background="https://s.yimg.com/cv/ae/nq/storm/assets/enhancrV21/1/enhancr_gradient-400x175.png"
valign="top"
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;"><br>
</td>
<td
class="ydpec705842card-actions"
style="text-align:right;padding:15px 15px 0 0;vertical-align:top;"><br>
</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;"><br>
</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>
<!--'"--><br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Powered by <a class="moz-txt-link-abbreviated" href="http://www.kitware.com" moz-do-not-send="true">www.kitware.com</a>
Visit other Kitware open-source projects at <a class="moz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html" moz-do-not-send="true">http://www.kitware.com/opensource/opensource.html</a>
Search the list archives at: <a class="moz-txt-link-freetext" href="http://markmail.org/search/?q=vtk-developers" moz-do-not-send="true">http://markmail.org/search/?q=vtk-developers</a>
Follow this link to subscribe/unsubscribe:
<a class="moz-txt-link-freetext" href="https://public.kitware.com/mailman/listinfo/vtk-developers" moz-do-not-send="true">https://public.kitware.com/mailman/listinfo/vtk-developers</a>
</pre>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Paul D. Hahn
CompIntense HPC, LLC
</pre>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Paul D. Hahn
CompIntense HPC, LLC
</pre>
</body>
</html>