我们正在设计一个新系统,我们已经为大多数类创建了接口,以便我们可以为它们创建模拟(谷歌模拟)以进行单元测试。因此,所有的功能都是虚拟的,但问题是我经常遇到模板虚拟功能问题。我已经看到了一些关于如何进行多派遣的例子,但他们似乎都在使用模板的一些变体,这似乎并不简单。那么这是否意味着我的整个代码库现在最终会导致模板难以读取/使用和调试?由于基于接口的编程而陷入C++虚拟模板功能问题
或者我没有设计好的接口。这里是一个简单的例子,我正在为消息队列写一个接口。
Class IMessageQueue {
Public:
Virtual int send(const T & value); // I can't do this but this is exactly what I want to do, as send should be able to send any type
};
Class MessageQueue : public IMessageQueue {
Public:
Virtual int send(const T & value) { ... }
};
Class MockMQ : public IMessageQueue {
Public:
Virtual int send(const T & value) {
// mock implementation
}
};
我该如何解决这个问题?这只是一个例子,但由于基于接口的编程,我遇到了很多这类问题。
你也许可以得到解决他们通过使它们不是虚拟的,并具有一个辅助函数,通过dynamic_cast确定类型,然后调用该特定类型的模板成员函数。我不知道它会在你的具体情况下变得多么丑陋和难以忍受,我也从未尝试过。 – Sopel