![](/img/trans.png)
[英]Does the Non-Virtual Interface idiom not apply to pure virtual functions?
我曾經寫過這樣的接口類: 這意味着我可以輕松繼承多個接口並像這樣使用它 但我最近閱讀了關於非虛擬接口習慣用法(類似http://www.gotw.ca/publications/mill18.htm 的內容),並且按照這些准則,我應該像這樣編寫我的接口: 這意味着其余的代碼現在看起來像這 ...
[英]Does the Non-Virtual Interface idiom not apply to pure virtual functions?
我曾經寫過這樣的接口類: 這意味着我可以輕松繼承多個接口並像這樣使用它 但我最近閱讀了關於非虛擬接口習慣用法(類似http://www.gotw.ca/publications/mill18.htm 的內容),並且按照這些准則,我應該像這樣編寫我的接口: 這意味着其余的代碼現在看起來像這 ...
[英]C# call an interface method non-virtual implementation
我是C#的新手,我不明白為什么編譯器不會抱怨這段代碼。 這是類的層次結構: 執行代碼: 執行---->> A - Able被打印出來。 為什么? 編譯器如何知道應該調用哪個函數? 當決定調用什么函數 - 運行時或編譯時? 如果我玷污一個新的class C ...
[英]No type named 'type' in CTRP derived class
我一直在為通用的單參數函子試驗“ 好奇地重復模板模式” ,並有兩種實現:一種使用有效的模板模板參數,另一種實現在接口類中嘗試訪問派生的Functor :: type。 在后一個示例中,編譯器(gcc 5.4.0)報告 錯誤 :“結構多維數據集<double>”中沒有名為“ ...
[英]Under the NVI idiom, why can't the virtual function be public?
C ++私有和受保護的虛擬方法 , 是否有不使用公共虛擬方法的正當理由? 在談論非虛擬接口( NVI )和非公共虛擬功能及其共生。 斯科特·邁耶斯(Scott Meyers)在有效的C ++中還說 有時虛擬功能甚至必須是公共的,但是NVI習慣用法實際上並不能應用。 我看不到 ...
[英]Android activity life cycle: why isn't calling the super method first enforced?
Android基本開發的要求之一(根據Google文檔)是,當您覆蓋活動的生命周期方法(onCreate,onResume,onPause等)時,必須首先調用父級的方法: 為什么Android API不使用非虛擬接口模式來強制這種行為,而不是依靠開發人員來記住呢?: Android ...
[英]Adding invariants in non virtual interface idiom
假設我使用NVI慣用法具有以下層次結構: 如果在層次結構中的某個時候我想在非虛擬基礎方法中“添加”不變式,那么這樣做的最佳方法是什么? 一種方法是在SpecialBase級別上遞歸NVI習慣用語: 但是我真的不喜歡這個主意,因為我不想為添加到層次結構中的每個派生基礎添加方法 ...
[英]Using the non-virtual-interface idiom, can/will my non-virtual function be inlined ?
我最近決定使用非虛擬接口慣用法(NVI)來設計C ++中的接口,主要是為了使用具有默認值的參數(從而避免由於默認參數被靜態綁定而導致的問題)。 我為我的班級提供了一個相當簡單的聲明,看起來像這樣: 我知道在頭文件中提供函數體會自動將函數標記為內聯的候選函數(雖然我不知道將該定義放在 ...
[英]Non-virtual methods, static binding, and interface in C#
我知道非虛擬方法是靜態綁定的,據我所知,這意味着在編譯時它本身就知道將在哪個對象上調用哪種方法。 該決定是基於對象的靜態類型進行的。 使我感到困惑的是接口 (而不是class )和靜態綁定。 考慮一下這段代碼, 演示代碼: http : //ideone.com/JOVmi ...
[英]Non-virtual interface design pattern in C#/C++
在設計界面時,有人建議使用非虛擬界面模式。 有人可以簡要介紹一下這種模式的好處嗎? ...
[英]Non-Virtual Interface - how to invoke the correct virtual function
我有一個看起來像這樣的層次結構: 所以問題是當我使用Base類創建派生類時如何使用此模式調用Execute()。 就我而言,我不想直接創建Derived,因為我有多個從Base派生的類,並且根據某些條件,我必須選擇一個不同的派生類。 有人可以幫忙嗎? ...
[英]java final methods vs c++ nonvirtual functions
java最終方法和c ++非虛方法有什么不同或相同? 怎么樣? ...
[英]What is the point of a private pure virtual function?
我在頭文件中遇到了以下代碼: 對我來說,這意味着無論是Engine類還是從它派生的類,都必須為那些純虛函數提供實現。 但是我不認為派生類可以訪問這些私有函數來重新實現它們——那么為什么要讓它們成為虛擬的呢? ...
[英]Non-virtual derivation: what do I really get from the compiler?
我想知道使用非虛擬派生時編譯器會產生什么: 此處的推導是否僅意味着編譯時檢查? 還是還有其他開銷? 我注意到我的編譯器在使用Point2或直接使用Point<2>時會生成大小相等的對象。 我推斷派生沒有產生vtable,因此,將不會進行虛擬調用。 我想念什么嗎 ...
[英]private overrides of private methods pattern? (ANSWER: NVI)
描述僅可虛擬調用並從基礎中的其他方法調用的方法的公認術語(如果有)是什么? 我偶爾會看到這被稱為回調,但這似乎與該術語的原始定義相去甚遠。 我什至不確定是否應該將其稱為模式,但是我正在嘗試在注釋代碼方面變得更加精確。 謝謝您的幫助! 摘要 :這似乎被稱為非虛擬接口模式,這是模板方法 ...
[英]C++: Difference between NVI and Template Method Patterns?
NVI( 非虛擬接口 )和模板方法模式之間有什么區別? 它們看起來非常相似,並且我讀到它們基本上是相同的,並且它們之間的差別是微妙的,而Template在某種程度上更為通用。 ...
[英]How to implement an interface class using the non-virtual interface idiom in C++?
在 C++ 中,接口可以由其方法是純虛擬的類來實現。 這樣的類可以是庫的一部分,用於描述對象應該實現哪些方法才能與庫中的其他類一起工作: : 現在我想使用類Lib::Bar ,所以我必須實現IFoo接口。 出於我的目的,我需要一個完整的相關類,所以我想使用一個基類來保證使用 NVI 習 ...
[英]Is the Non-Virtual Interface (NVI) idiom as useful in C# as in C++?
在C ++中,我經常需要NVI來獲得API的一致性。 不過,在C#中我沒有看到它用得那么多。 我想知道這是因為C#作為一種語言,提供的功能使得NVI不再需要嗎? (盡管如此,我仍然在C#中使用NVI。) ...
[英]nonvirtual interface idiom for more than two levels of inheritance?
非虛擬接口慣用語描述了虛擬方法如何是非公共定制點,而公共方法是非虛擬的,以允許基類始終控制如何調用定制點。 這是一個優雅的習慣用法,我喜歡使用它,但是如果派生類本身是基類,它如何工作 ...