Improve the code for proxy generation
more of a layout improvement, to avoid any code duplication. The mechanics remain the same - write an explicit specialisation - trigger template intantiation within a dedicated translation unit
This commit is contained in:
parent
db7172df29
commit
6f2ed76d83
6 changed files with 176 additions and 116 deletions
|
|
@ -34,12 +34,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ==================== gui::Display ====================================== */
|
||||
|
||||
#include "include/display-facade.h"
|
||||
#include "include/interfaceproxy.hpp"
|
||||
|
||||
|
|
@ -58,9 +52,16 @@ namespace lumiera {
|
|||
namespace lumiera {
|
||||
namespace facade {
|
||||
|
||||
using IHandle = InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_Display, 0)
|
||||
, lumiera::Display
|
||||
>;
|
||||
|
||||
|
||||
/* ==================== gui::Display ====================================== */
|
||||
|
||||
using Interface = LUMIERA_INTERFACE_INAME(lumieraorg_Display, 0);
|
||||
using Facade = lumiera::Display;
|
||||
|
||||
using IHandle = InstanceHandle<Interface, Facade>;
|
||||
|
||||
|
||||
template<>
|
||||
class Proxy<IHandle>
|
||||
: public Binding<IHandle>
|
||||
|
|
@ -81,16 +82,12 @@ namespace facade {
|
|||
|
||||
|
||||
public:
|
||||
using IBinding::IBinding;
|
||||
using Binding<IHandle>::Binding;
|
||||
};
|
||||
|
||||
|
||||
} //namespace facade
|
||||
|
||||
|
||||
// emit code for the proxy implementation here...
|
||||
template
|
||||
class InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_Display, 0)
|
||||
, lumiera::Display
|
||||
>;
|
||||
} // namespace lumiera
|
||||
/** emit proxy code here... */
|
||||
template
|
||||
class Link<Interface,Facade>;
|
||||
|
||||
}} //namespace facade::lumiera
|
||||
|
|
|
|||
|
|
@ -32,11 +32,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ==================== GuiNotification =================================== */
|
||||
|
||||
#include "include/gui-notification-facade.h"
|
||||
#include "include/interfaceproxy.hpp"
|
||||
|
||||
|
|
@ -50,9 +45,15 @@ namespace facade {
|
|||
using lib::diff::MutationMessage;
|
||||
|
||||
|
||||
using IHandle = InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_GuiNotification, 0)
|
||||
, gui::GuiNotification
|
||||
>;
|
||||
|
||||
/* ==================== SessionCommand =================================== */
|
||||
|
||||
using Interface = LUMIERA_INTERFACE_INAME(lumieraorg_GuiNotification, 0);
|
||||
using Facade = gui::GuiNotification;
|
||||
|
||||
using IHandle = InstanceHandle<Interface, Facade>;
|
||||
|
||||
|
||||
template<>
|
||||
class Proxy<IHandle>
|
||||
: public Binding<IHandle>
|
||||
|
|
@ -69,15 +70,12 @@ namespace facade {
|
|||
|
||||
|
||||
public:
|
||||
using IBinding::IBinding;
|
||||
using Binding<IHandle>::Binding;
|
||||
};
|
||||
|
||||
} //namespace facade
|
||||
|
||||
|
||||
// emit code for the proxy implementation here...
|
||||
template
|
||||
class InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_GuiNotification, 0)
|
||||
, gui::GuiNotification
|
||||
>;
|
||||
} // namespace lumiera
|
||||
|
||||
/** emit proxy code here... */
|
||||
template
|
||||
class Link<Interface,Facade>;
|
||||
|
||||
}} //namespace facade::lumiera
|
||||
|
|
|
|||
|
|
@ -153,8 +153,7 @@ namespace facade {
|
|||
struct Binding<InstanceHandle<I,FA>>
|
||||
: public FA
|
||||
{
|
||||
typedef InstanceHandle<I,FA> IHandle;
|
||||
typedef Binding<IHandle> IBinding;
|
||||
using IHandle = InstanceHandle<I,FA>;
|
||||
|
||||
I& _i_;
|
||||
|
||||
|
|
|
|||
|
|
@ -32,11 +32,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ==================== SessionCommand =================================== */
|
||||
|
||||
#include "include/session-command-facade.h"
|
||||
#include "include/interfaceproxy.hpp"
|
||||
|
||||
|
|
@ -48,9 +43,14 @@ namespace control{
|
|||
namespace lumiera {
|
||||
namespace facade {
|
||||
|
||||
using IHandle = InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_SessionCommand, 0)
|
||||
, proc::control::SessionCommand
|
||||
>;
|
||||
|
||||
|
||||
/* ==================== SessionCommand =================================== */
|
||||
|
||||
using Interface = LUMIERA_INTERFACE_INAME(lumieraorg_SessionCommand, 0);
|
||||
using Facade = proc::control::SessionCommand;
|
||||
|
||||
using IHandle = InstanceHandle<Interface, Facade>;
|
||||
|
||||
|
||||
template<>
|
||||
|
|
@ -66,15 +66,12 @@ namespace facade {
|
|||
|
||||
|
||||
public:
|
||||
using IBinding::IBinding;
|
||||
using Binding<IHandle>::Binding;
|
||||
};
|
||||
|
||||
} //namespace facade
|
||||
|
||||
|
||||
// emit code for the proxy implementation here...
|
||||
template
|
||||
class InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_SessionCommand, 0)
|
||||
, proc::control::SessionCommand
|
||||
>;
|
||||
} // namespace lumiera
|
||||
|
||||
/** emit proxy code here... */
|
||||
template
|
||||
class Link<Interface,Facade>;
|
||||
|
||||
}} //namespace facade::lumiera
|
||||
|
|
|
|||
|
|
@ -47,12 +47,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ==================== DummyPlayer ======================================= */
|
||||
|
||||
#include "include/dummy-player-facade.h"
|
||||
#include "include/interfaceproxy.hpp"
|
||||
|
||||
|
|
@ -60,6 +54,8 @@ namespace lumiera {
|
|||
|
||||
// emit the vtable here into this translation unit within liblumieracommon.so ...
|
||||
DummyPlayer::~DummyPlayer() { }
|
||||
DummyPlayer::ProcessImplementationLink::~ProcessImplementationLink() { };
|
||||
|
||||
|
||||
/** static storage for the facade access front-end */
|
||||
lib::Depend<DummyPlayer> DummyPlayer::facade;
|
||||
|
|
@ -69,9 +65,14 @@ namespace lumiera {
|
|||
|
||||
namespace facade {
|
||||
|
||||
using IHandle = InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_DummyPlayer, 0)
|
||||
, lumiera::DummyPlayer
|
||||
>;
|
||||
|
||||
|
||||
/* ==================== DummyPlayer ======================================= */
|
||||
|
||||
using Interface = LUMIERA_INTERFACE_INAME(lumieraorg_DummyPlayer, 0);
|
||||
using Facade = lumiera::DummyPlayer;
|
||||
|
||||
using IHandle = InstanceHandle<Interface, Facade>;
|
||||
|
||||
|
||||
template<>
|
||||
|
|
@ -105,9 +106,14 @@ namespace lumiera {
|
|||
|
||||
|
||||
public:
|
||||
using IBinding::IBinding;
|
||||
using Binding<IHandle>::Binding;
|
||||
};
|
||||
|
||||
|
||||
/** emit proxy code here... */
|
||||
template
|
||||
class Link<Interface,Facade>;
|
||||
|
||||
} // namespace facade
|
||||
|
||||
|
||||
|
|
@ -120,14 +126,5 @@ namespace lumiera {
|
|||
impl().doPlay(yes);
|
||||
}
|
||||
|
||||
// emit the VTable and typeinfo for this interface here (in liblumieracommon.so)
|
||||
DummyPlayer::ProcessImplementationLink::~ProcessImplementationLink() { };
|
||||
|
||||
|
||||
|
||||
|
||||
template
|
||||
class InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_DummyPlayer, 0)
|
||||
, lumiera::DummyPlayer
|
||||
>;
|
||||
} // namespace lumiera
|
||||
|
|
|
|||
|
|
@ -28192,8 +28192,8 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1520722155112" ID="ID_1512641426" MODIFIED="1522421627198" TEXT="Integration">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1520722155112" FOLDED="true" ID="ID_1512641426" MODIFIED="1522734082428" TEXT="Integration">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1521160755182" ID="ID_678080556" MODIFIED="1522428573233" TEXT="Umbenennen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
|
|
@ -28295,8 +28295,8 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521858774321" ID="ID_302686020" MODIFIED="1522635466053" TEXT="aufräumen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1521858774321" FOLDED="true" ID="ID_302686020" MODIFIED="1522734077340" TEXT="aufräumen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1521858779614" ID="ID_62114860" MODIFIED="1521928808594" TEXT="was ist depend4test?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1521928764171" ID="ID_507085354" MODIFIED="1521928798462" TEXT="die alte Testmock-Lösung">
|
||||
|
|
@ -28409,8 +28409,8 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522639301526" ID="ID_1959793943" MODIFIED="1522716036952" TEXT="InterfaceProxy umschreiben">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1522639301526" FOLDED="true" ID="ID_1959793943" MODIFIED="1522734050849" TEXT="InterfaceProxy umschreiben">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1522639313964" ID="ID_620355867" MODIFIED="1522639322758" TEXT="er soll sich in lib::Depend einklinken"/>
|
||||
<node CREATED="1522639904986" ID="ID_568095840" MODIFIED="1522639917092" TEXT="etwas wie den Holder brauchen wir weiterhin"/>
|
||||
<node CREATED="1522640047991" ID="ID_965836148" MODIFIED="1522640058690" TEXT="wie funktioniert's?">
|
||||
|
|
@ -28442,8 +28442,9 @@
|
|||
</node>
|
||||
<node CREATED="1522640586812" ID="ID_1577947298" MODIFIED="1522640604677" TEXT="das InstanceHandle ist Member in der Service-Implementierung"/>
|
||||
</node>
|
||||
<node CREATED="1522640617752" ID="ID_312762900" MODIFIED="1522640623163" TEXT="Plan zum Umschreiben">
|
||||
<node CREATED="1522640706787" ID="ID_1205995335" MODIFIED="1522642873197" TEXT="Idee-1">
|
||||
<node COLOR="#338800" CREATED="1522640617752" ID="ID_312762900" MODIFIED="1522734029362" TEXT="Plan zum Umschreiben">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1522640706787" ID="ID_1205995335" MODIFIED="1522734041752" TEXT="Idee-1">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1522640624319" ID="ID_448652627" MODIFIED="1522640718658" TEXT="den Holder umbauen">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -28475,8 +28476,8 @@
|
|||
<node CREATED="1522641344691" ID="ID_1154911224" MODIFIED="1522641358813" TEXT="gegenwärtig: bekommt das InstanceHandle"/>
|
||||
<node CREATED="1522641378263" ID="ID_1762905192" MODIFIED="1522641389641" TEXT="könnte aber direkt eine Interface-Ref sein"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522641405299" ID="ID_676190433" MODIFIED="1522729429778" TEXT="Proxy">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1522641405299" FOLDED="true" ID="ID_676190433" MODIFIED="1522734021476" TEXT="Proxy">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1522641413586" ID="ID_1187300065" MODIFIED="1522649896016" TEXT="Anforderungen">
|
||||
<linktarget COLOR="#86d29d" DESTINATION="ID_1187300065" ENDARROW="Default" ENDINCLINATION="-35;65;" ID="Arrow_ID_1735914452" SOURCE="ID_1212106242" STARTARROW="None" STARTINCLINATION="-135;-67;"/>
|
||||
<node CREATED="1522641419769" ID="ID_1008132394" MODIFIED="1522641450457" TEXT="erbt vom Business-Interface"/>
|
||||
|
|
@ -28545,7 +28546,7 @@
|
|||
<font NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1522729001386" ID="ID_242747417" MODIFIED="1522729342788" TEXT="ist mir bisher nicht gelungen">
|
||||
<node CREATED="1522729001386" ID="ID_242747417" MODIFIED="1522733826161" TEXT="ist mir bisher nicht gelungen...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -28560,16 +28561,18 @@
|
|||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<arrowlink COLOR="#a02659" DESTINATION="ID_1547993807" ENDARROW="Default" ENDINCLINATION="231;-29;" ID="Arrow_ID_1421481593" STARTARROW="None" STARTINCLINATION="544;-14;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<arrowlink COLOR="#b49ca6" DESTINATION="ID_1547993807" ENDARROW="Default" ENDINCLINATION="10;-59;" ID="Arrow_ID_1421481593" STARTARROW="None" STARTINCLINATION="323;-44;"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1522733831301" ID="ID_1741953995" MODIFIED="1522733846627" TEXT="Spezialisierung + explizite Template-Instanz">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1522697501541" ID="ID_793991584" MODIFIED="1522729342788" TEXT="Forwading-Implementation des Business-Interface">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522697646161" ID="ID_1020206021" MODIFIED="1522697654713" TEXT="Technologie">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1522697646161" ID="ID_1020206021" MODIFIED="1522733904640" TEXT="Technologie">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1522697675229" ID="ID_1605136526" MODIFIED="1522697732617" STYLE="fork" TEXT="Indirektion notwendig">
|
||||
<node COLOR="#338800" CREATED="1522697690651" ID="ID_1244533717" MODIFIED="1522724892373" TEXT="Erzeugung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -28581,15 +28584,16 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1522697743604" ID="ID_829814208" MODIFIED="1522697751286" TEXT="mögliche Lösungen">
|
||||
<node CREATED="1522697764121" FOLDED="true" ID="ID_809124789" MODIFIED="1522729411578" TEXT="PImpl">
|
||||
<node COLOR="#338800" CREATED="1522697743604" FOLDED="true" ID="ID_829814208" MODIFIED="1522733898797" TEXT="mögliche Lösungen">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1522697764121" FOLDED="true" ID="ID_809124789" MODIFIED="1522733895572" TEXT="PImpl">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1522698166313" ID="ID_904988310" MODIFIED="1522698184466" TEXT="facade::Link hält einen smart-Ptr"/>
|
||||
<node CREATED="1522698185030" ID="ID_53125514" MODIFIED="1522698208087" TEXT="auf die eigentliche DependInject::ServiceInstance"/>
|
||||
<node CREATED="1522698222201" ID="ID_1341541114" MODIFIED="1522698292643" TEXT="facade::Link muß Methoden (ctor/dtor und operator) separat definieren"/>
|
||||
<node CREATED="1522698295719" ID="ID_381014397" MODIFIED="1522698339173" TEXT="das ist effektiv die Lösung "separat definieren" + separate Storage"/>
|
||||
</node>
|
||||
<node CREATED="1522697803923" FOLDED="true" ID="ID_238110365" MODIFIED="1522729409819" TEXT="freie Funktionen">
|
||||
<node CREATED="1522697803923" FOLDED="true" ID="ID_238110365" MODIFIED="1522733895572" TEXT="freie Funktionen">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1522698092963" ID="ID_433421738" MODIFIED="1522698105987" TEXT="ist die bisher bestehende Lösung">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -28613,19 +28617,23 @@
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1522697773903" ID="ID_116063224" MODIFIED="1522697803239" TEXT="Methoden separat definieren">
|
||||
<node CREATED="1522698343480" ID="ID_1548420276" MODIFIED="1522698385583" TEXT="dafür sorgen, daß die Definitionen nur in der Proxy-Instantiierung (TU) sichtbar sind"/>
|
||||
<node CREATED="1522698386810" ID="ID_1773412414" MODIFIED="1522698405108" TEXT="diese Definitionen müssen externe Linkage bekommen (d.h. nicht inline)"/>
|
||||
<node CREATED="1522698437036" ID="ID_1400832405" MODIFIED="1522698754819" TEXT="Erzeugung ist automatisch, sofern dort das InstanceHandle-Template instantiiert wird"/>
|
||||
<node CREATED="1522698892532" ID="ID_584280618" MODIFIED="1522698944569" TEXT="Fazit: in einer TU muß (nur) eine explizite Template-Instantiierung erfolgen"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522699050727" ID="ID_1923832821" MODIFIED="1522729422771" TEXT="wie auch immer">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1522699055062" ID="ID_1759934312" MODIFIED="1522699078711" TEXT="Spezialisierung Proxy<IHA> + Template Instanz dieser">
|
||||
<node CREATED="1522699225239" ID="ID_894223806" MODIFIED="1522699240168" TEXT="das ist praktisch die bestehende Lösung"/>
|
||||
<node CREATED="1522699240684" ID="ID_600377865" MODIFIED="1522699259238" TEXT="wird dort nur indirekt über die Instanz der freinen Funktionen ausgelöet"/>
|
||||
<node CREATED="1522697773903" ID="ID_116063224" MODIFIED="1522733895572" TEXT="Methoden separat definieren">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1522698343480" ID="ID_1548420276" MODIFIED="1522733895572" TEXT="dafür sorgen, daß die Definitionen nur in der Proxy-Instantiierung (TU) sichtbar sind"/>
|
||||
<node CREATED="1522698386810" ID="ID_1773412414" MODIFIED="1522733895572" TEXT="diese Definitionen müssen externe Linkage bekommen (d.h. nicht inline)"/>
|
||||
<node CREATED="1522698437036" ID="ID_1400832405" MODIFIED="1522733895572" TEXT="Erzeugung ist automatisch, sofern dort das InstanceHandle-Template instantiiert wird"/>
|
||||
<node CREATED="1522698892532" ID="ID_584280618" MODIFIED="1522733895572" TEXT="Fazit: in einer TU muß (nur) eine explizite Template-Instantiierung erfolgen"/>
|
||||
<node COLOR="#338800" CREATED="1522699050727" FOLDED="true" ID="ID_1923832821" MODIFIED="1522733895572" TEXT="wie auch immer">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1522699055062" ID="ID_1759934312" MODIFIED="1522733778687" TEXT="Spezialisierung Proxy<IHA> + Template Instanz dieser">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1522699225239" ID="ID_894223806" MODIFIED="1522733778687" TEXT="das ist praktisch die bestehende Lösung">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1522699093017" ID="ID_471646453" MODIFIED="1522699210312" TEXT="Definition einer ungetemplateten Proxy-Klasse + CRTP">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1522699240684" ID="ID_600377865" MODIFIED="1522733778687" TEXT="wird dort nur indirekt über die Instanz der freinen Funktionen ausgelöet"/>
|
||||
</node>
|
||||
<node CREATED="1522699093017" FOLDED="true" ID="ID_471646453" MODIFIED="1522733778687" TEXT="Definition einer ungetemplateten Proxy-Klasse + CRTP">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1522699211944" ID="ID_1925086643" MODIFIED="1522699223507" TEXT="geht das überhaupt?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
|
|
@ -28677,30 +28685,94 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1522709550450" ID="ID_1653470424" MODIFIED="1522709566783" TEXT="konnte keine ganbare Lösung finden">
|
||||
<node CREATED="1522709550450" ID="ID_1653470424" MODIFIED="1522733671833" TEXT="konnte keine ganbare Lösung finden">
|
||||
<linktarget COLOR="#4a2d79" DESTINATION="ID_1653470424" ENDARROW="Default" ENDINCLINATION="-1;58;" ID="Arrow_ID_362703203" SOURCE="ID_1800542023" STARTARROW="None" STARTINCLINATION="109;-22;"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1522709579398" ID="ID_1445259032" MODIFIED="1522709595885" TEXT="kann man spezialisieren und zugleich Instantiieren?">
|
||||
<node CREATED="1522709579398" ID="ID_1445259032" MODIFIED="1522733778687" TEXT="kann man spezialisieren und zugleich Instantiieren?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1522720815569" ID="ID_1906873483" MODIFIED="1522720817589" TEXT="nein"/>
|
||||
<node CREATED="1522720818625" ID="ID_693558811" MODIFIED="1522720821985" TEXT="wie schade">
|
||||
<node CREATED="1522720815569" ID="ID_1906873483" MODIFIED="1522733778687" TEXT="nein"/>
|
||||
<node CREATED="1522720818625" ID="ID_693558811" MODIFIED="1522733778687" TEXT="wie schade">
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1522724948516" ID="ID_1547993807" MODIFIED="1522729247734" TEXT="explizite Instantiierung notwendig">
|
||||
<linktarget COLOR="#a02659" DESTINATION="ID_1547993807" ENDARROW="Default" ENDINCLINATION="231;-29;" ID="Arrow_ID_1421481593" SOURCE="ID_242747417" STARTARROW="None" STARTINCLINATION="544;-14;"/>
|
||||
<node CREATED="1522724948516" ID="ID_1547993807" MODIFIED="1522733895572" TEXT="explizite Instantiierung notwendig">
|
||||
<linktarget COLOR="#b49ca6" DESTINATION="ID_1547993807" ENDARROW="Default" ENDINCLINATION="10;-59;" ID="Arrow_ID_1421481593" SOURCE="ID_242747417" STARTARROW="None" STARTINCLINATION="323;-44;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1522724966777" ID="ID_650754221" MODIFIED="1522724973013" TEXT="häßlich und umständlich"/>
|
||||
<node CREATED="1522724973625" ID="ID_1016558302" MODIFIED="1522724976780" TEXT="Code dupliziert"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1522724977440" ID="ID_686663661" MODIFIED="1522724991255" TEXT="bessere Lösung?">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node CREATED="1522724966777" ID="ID_650754221" MODIFIED="1522733895572" TEXT="häßlich und umständlich"/>
|
||||
<node CREATED="1522724973625" ID="ID_1016558302" MODIFIED="1522733895572" TEXT="Code dupliziert"/>
|
||||
<node COLOR="#338800" CREATED="1522724977440" ID="ID_686663661" MODIFIED="1522733895572" TEXT="bessere Lösung?">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1522733470671" ID="ID_1296497133" MODIFIED="1522733895572" TEXT="nicht wirklich....">
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node CREATED="1522733478510" ID="ID_1800542023" MODIFIED="1522733895572" TEXT="Proxy erbt per CRTP geht nicht">
|
||||
<arrowlink COLOR="#4a2d79" DESTINATION="ID_1653470424" ENDARROW="Default" ENDINCLINATION="-1;58;" ID="Arrow_ID_362703203" STARTARROW="None" STARTINCLINATION="109;-22;"/>
|
||||
</node>
|
||||
<node CREATED="1522733542453" ID="ID_239191861" MODIFIED="1522733895572" TEXT="Proxy-Instantiierung triggert nicht InstanceHandle">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
obwohl es das sollte.
|
||||
</p>
|
||||
<p>
|
||||
Aber anscheinend macht der Compiler das nur partiell,
|
||||
</p>
|
||||
<p>
|
||||
denn es wird ja nur eine const& an den ctor von Binding übergeben.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Allerdings erscheint es mir nicht sinnvoll, hier mit Tricksereien zu arbeiten!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1522733618506" ID="ID_1873321000" MODIFIED="1522733895572" TEXT="man könnte stattdesen Link instantiieren">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1522733629233" ID="ID_424753876" MODIFIED="1522733895572" TEXT="Code-Duplizierung durch Typedefs beseitigt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1522733866272" ID="ID_762156149" MODIFIED="1522734019934" TEXT="aktuelle Lösung erscheint adäquat">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
sie ist zwar nicht schön -- aber was ist an einem Interface-Binding schon "schön"?
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Sie ist hinreichend wartbar, sofern man sie per copy-n-pate vervielfältigt.
|
||||
</p>
|
||||
<p>
|
||||
Es wäre sogar denkbar, in diesen Rump eine generierte Proxy-Klasse zu kleben,
|
||||
</p>
|
||||
<p>
|
||||
da nur wenige Variable erstetzt werden müßten.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue