我正在重構一個非常大的代碼庫。以舊的方式,有兩個庫:FooFactory
和BarLib
。 BarLib
取決於FooFactory
而這又取決於很多的Foo1
,Foo2
,Foo3
代碼等等時所建,FooFactory
提取所有的Foo
依賴關係,然後BarLib
可以使用FooFactory
要求的,也就是說,一個Foo7
建設。在我的重構中,我使FooX
所有人都依賴於FooFactory
(而不是其他方式),並且如果makefile恰好鏈接它們,則靜態註冊它們自己。 BarLib
仍然取決於FooFactory
,但如果鏈接並因此靜態註冊到FooFactory
,則只會成功創建Foo7
。可以extern解決這個問題或者我可以用其他方法解決這個問題嗎?
我遇到了以下問題:
有一個特殊的Foo14
,其主要工廠的文件用繩子FooFactory.C
在FooFactory
結構是BarLib
套。它的工作方式是FooFactory.H
公開了一個名爲setString(const std::string&);
的全局函數,而在.C
文件中它有一個匿名命名空間中的std::string theString
變量。那麼BarLib
中的方法可能會或可能不會使用此函數來設置此字符串。在FooFactory.C
的語料庫中,該字符串在構建Foo14
期間被檢查。
問題是,在依賴關係顛倒的情況下,Foo
傢伙的所有構造代碼都保存在各自的庫中,只有在靜態註冊後纔會召喚。我沒有簡單的方法將std::string
降至Foo14
,因爲它遵循構建Foo
所傳遞的參數的通用接口。如果我把字符串theString
放在Foo14.C
那麼這將迫使BarLib
取決於Foo14
爲了設置它...所以我想知道如果我可以保留它在FooFactory.C
,但在Foo14
聲明它爲extern並利用它。即使theString
位於FooFactory.C
的匿名命名空間中,這是否也能正常工作?或者現在必須成爲全球生活在頭上?或者什麼是替代解決方案?
很高興知道謝謝 - 虐待檢查如何工作。 –