Hier mal grad ein Beispiel in Pseudocode:
class <TYPE> {
static TYPE add(TYPE a, TYPE b) {
return a + b;
}
}
Du überladene Operatoren funktioniert dass, egal, ob man jetzt eine Wrapper-Klasse für Integer, Floats, Chars oder was-auch-immer übergibt.
Das Problem bei Shared Libraries ist, dass ein komplett anderer Code erzeugt wird, wenn man einem Template z.B. ein Objekt statt einem Integer übergibt. Der Bytecode müsste extrem abstrakt sein, dann kann man auch gleich den Sourcecode der Shared Library veröffentlichen, statt solchen Bytecode zu benutzen. Ausserdem würde das Ausführen langsammer, weil die VM die abstrakten Instructions noch in kleinere Umwandeln müsste.
Ich werde wohl die erste Methode benutzen, Shared Libraries müssten dann entweder als Source vorliegen, oder als Templateargumente können nur die Typen benutzt werden, für welche die Library kompiliert wurde. Wenn man andere benutzen will, kann man die ja immernoch in Wrapperklassen stecken.