Re: Porting C++ Template to Java Generic
Aadain wrote:
On May 17, 12:19 pm, "Chronic Philharmonic" <karl.uppi...@verizon.net>
wrote:
Port the design, not the code.
This is exactly what I am attempting to do. I've porting the
functionality of the program, which itself is pretty efficient and
mostly language neutral. There were plenty of operations that took
advantage of C++ functionality, such as the original problem I
demonstrated in the original post. After doing some digging and some
thinking on my own, I'm beginning to think that the solution is create
a simple master class that implements basic math for all possible
types that the generic types will take (there are only a handful) and
requiring the generic class to extend that master class. Then instead
of the command
return t1.Evaluate() * t2.Evaluate();
It would look like
return t1.Evaluate().mult(t2.Evaluate());
Since Java doesn't support operator overloading, that does make sense.
Has anyone else done something similar with generics before?
You don't even *need* generics for this, you *can* use a simple
interface, although it could help.
interface Addible<R,T> {
R add(T t);
}
class MyInt extends Addible<MyInt, MyInt> {
private final int value;
public MyInt(int value) {
this.value = value;
}
public MyInt add(MyInt other) {
return new MyInt(value + other.value);
}
}
public class DoesSomeWork {
public static <T extends Addible<T,T>> T sumOf(Collection<T> addable){
Iterator<T> it = addible.iterator();
if (!it.hasNext()) {
return null;
}
T current = it.next();
while (it.hasNext() {
current = current.add(it.next());
}
return current;
}
}
MyInt total = DoesSomeWork.sumOf(myIntList);
--
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>