模块A出口模块B和C重叠实例的肮脏破解?
模块B出口实例X
模块C出口实例ý
X和Y是一个普通类型的类的实例。
实例X和Y的类型完全相同,即完全重叠。
当我单独使用B或C时,一切正常。当我导入它们(这里是A)进行一些比较测试(或基准测试)时,我在C语言中发现重叠的实例错误,说X和Y都匹配。
这令我感到困惑,因为从C到X的唯一路径是:C -> A -> B
。这是应该如何?另外,有没有办法解决这个问题?对于肮脏的黑客行为我没有问题,因为这两个实例在正常情况下从不一起使用。特别是,我不想引进幻影类型等
你不需要从C到X的路径,你需要一个从C到X的路径到一个公共会场。这是A。实例总是被导出,所以在A中,你有两个实例在范围内。唯一理智的方法是不要为相同类型使用同一类的两个实例。 (如果B和C都是你的,请修复它!如果其中一个是你的,另一个不是的话,你能摆脱你的实例并使用另一个吗?如果这两者都不是你的,请戳包的维护者以便明智地解决它) –
他们都是我的,只是我希望保留的两个替代实现。我知道我可以使用幻像类型来解决这个问题,但最终,这会使事情变得复杂,在我的情况下会导致更多噪音语法(类型类用作DSL的一部分)。在Scala中,可以选择导入哪些实例,所以我认为必须有一些方法。 – letmaik