【发布时间】:2019-01-16 13:00:08
【问题描述】:
是否有任何方法可以根据所使用的泛型或模板在 Java 或 C++ 中动态或预编译方法或函数的名称?这是一个绘制这个想法的代码:
Java:
class Adder<T, R> {
add"T"(T t);
add"R"(R r);
}
...
obj = new Adder<MyClass, ClassTwo>();
obj.addMyClass(myObject);
obj.addClassTwo(objectTwo);
一个更具体的例子:定义在矩阵集合中的向量空间,在实数集合中,定义了一个返回矩阵的矩阵乘法(Matrix X Matrix)和一个也返回矩阵的实数乘法(Real X Matrix),其中不同的实现。例如:
intereface VectorSpace<T, R> {
...
T multiply"T" (T arg0, T arg1);
T multiply"R" (T arg0, R arg1);
}
...
class RealMatrixVectorSpace implements VectorSpace<Matrix, Real> {
Matrix multiplyMatrix (Matrix arg0, Matrix arg1) { ... }
Matrix multiplyReal (Matrix arg0, Real arg1) { ... }
}
但是向量空间可以用其他输入来定义,我试图为程序定义以利用这个通用概念。
【问题讨论】:
-
C++ 中的邪恶宏,但
Adder<MyClass>().add(myObject)有什么问题? -
不要将 java 泛型与 c++ 模板混淆,它们是完全不同的野兽。它基本上是一个两个问题
-
等等什么?如果它是用 Java 或 C++ 编写的,对你来说到底有什么关系呢?你心里有目标吗?
-
如果您希望方法具有不同的名称,那么为什么它们应该是同一个模板的实例化?建议您阅读xy problem。了解用例有助于回答问题(有时需要给出正确答案)
-
@LBald 但这些方法会做不同的事情,还是做同样的事情?如果他们做同样的事情,为什么他们要不同的名字?如果他们做不同的事情,他们怎么可能是通用的?