我有一個自定義class
,我想盡量減少我的團隊中有人不小心複製它的可能性,因爲這可能會破壞我們系統中的某些不變量。爲此,我將複製構造函數設爲私有,因爲沒有理由任何人需要將它複製到該類的任何合法用法中。Be-friend'ing std :: tuple
但是,該類是該框架的一部分,該對象的複製構造爲std::tuple
是必需的。我試圖使用friend
,但編譯器仍然抱怨,因爲std::tuple
的內部類(es?)也需要朋友訪問。
什麼是獲得我想要的最佳方式?
我有一個自定義class
,我想盡量減少我的團隊中有人不小心複製它的可能性,因爲這可能會破壞我們系統中的某些不變量。爲此,我將複製構造函數設爲私有,因爲沒有理由任何人需要將它複製到該類的任何合法用法中。Be-friend'ing std :: tuple
但是,該類是該框架的一部分,該對象的複製構造爲std::tuple
是必需的。我試圖使用friend
,但編譯器仍然抱怨,因爲std::tuple
的內部類(es?)也需要朋友訪問。
什麼是獲得我想要的最佳方式?
如果框架要求你的類是可複製的,你應該提供一個可複製的類。
如果你的類真的只是可移動的,或者甚至沒有,那麼框架應該有一個std::unique_ptr
或類似的對象呢?或者你可以創建一個可移動的適配器類,該類可以轉發接口...
該類用戶的前向接口的一部分是無論是可移動還是可複製的。如果您試圖使其不可複製,除非您碰巧是目標應用程序區域的組件......這會限制代碼重用,並且可能會混淆該類的潛在用戶是否可以複製/移動它。
這可能是框架並不真的需要複製,而是可以重構來移動呢?
這個問題很不清楚,爲什麼你不希望它是可複製的。你似乎會說壞事會發生,但由於某種原因,如果框架複製,你並不關心。是否真的可以複製或不復制?
這可能是因爲您需要制定一個單獨的系統來跟蹤/執行您所關注的不變量,而不是試圖禁止複製此類。
請添加SSCCE。 – Mikhail
'friend'-ship是C++中類類型之間最強的關係。你真的想用那種你甚至沒有創建過的類型?爲什麼'std :: tuple'複製它,但沒有其他人可以? – BoBTFish
你試圖解決的*實際*問題是什麼?請[閱讀有關XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 –