在我的公司系統中,我們使用一個類來表示bean。它只是使用boost :: variant和一些序列化/反序列化的信息的持有者。它運行良好,但我們遇到了一個問題:它不在接口之上,並且由於我們通過dll使用模塊化,爲它構建接口變得非常複雜,因爲它幾乎被應用程序的每個部分所使用,並且可悲地接口(抽象類)必須通過指針訪問,巫婆幾乎不可能重構整個系統。Turn class「Interfaceable」
我們的結構是:
DLL答:通過抽象類
DLL接口B定義:接口實現
有一種無痛的方式來實現這一目標(可能使用模板,我不知道)或者我應該忘記做這個工作,並簡單地鏈接所有與DLL B?
謝謝
編輯:這是我的例子。
這是在dll上A
BeanProtocol是N dataprotocol itens的持有者,它由索引處理。
class DataProtocol;
class UTILS_EXPORT BeanProtocol
{
public:
virtual DataProtocol& get(const unsigned int ) const
{
throw std::runtime_error("Not implemented");
}
virtual void getFields(std::list<unsigned int>&) const
{
throw std::runtime_error("Not implemented");
}
virtual DataProtocol& operator[](const unsigned int)
{
throw std::runtime_error("Not implemented");
}
virtual DataProtocol& operator[](const unsigned int) const
{
throw std::runtime_error("Not implemented");
}
virtual void fromString(const std::string&)
{
throw std::runtime_error("Not implemented");
}
virtual std::string toString() const
{
throw std::runtime_error("Not implemented");
}
virtual void fromBinary(const std::string&)
{
throw std::runtime_error("Not implemented");
}
virtual std::string toBinary() const
{
throw std::runtime_error("Not implemented");
}
virtual BeanProtocol& operator=(const BeanProtocol&)
{
throw std::runtime_error("Not implemented");
}
virtual bool operator==(const BeanProtocol&) const
{
throw std::runtime_error("Not implemented");
}
virtual bool operator!=(const BeanProtocol&) const
{
throw std::runtime_error("Not implemented");
}
virtual bool operator==(const char*) const
{
throw std::runtime_error("Not implemented");
}
virtual bool hasKey(unsigned int field) const
{
throw std::runtime_error("Not implemented");
}
};
其他類(名爲GenericBean)實現它。這是我發現這個工作的唯一方法,但是現在我想將它轉換爲一個真正的接口並刪除UTILS_EXPORT(這是一個_declspec宏),最後刪除B與A的強制關聯。
你可以添加一些示例代碼?真的很難判斷你的問題到底是什麼。 – 2009-12-28 16:23:21
我不明白,一個抽象類的DLL?沒有代碼。 – 2009-12-28 16:30:53
爲什麼使用異常而不是純虛擬方法? – 2010-01-06 05:20:28