cost 92 ms
非虛擬接口習慣用法是否不適用於純虛擬函數?

[英]Does the Non-Virtual Interface idiom not apply to pure virtual functions?

我曾經寫過這樣的接口類: 這意味着我可以輕松繼承多個接口並像這樣使用它 但我最近閱讀了關於非虛擬接口習慣用法(類似http://www.gotw.ca/publications/mill18.htm 的內容),並且按照這些准則,我應該像這樣編寫我的接口: 這意味着其余的代碼現在看起來像這 ...

C#調用非虛擬實現的接口方法

[英]C# call an interface method non-virtual implementation

我是C#的新手,我不明白為什么編譯器不會抱怨這段代碼。 這是類的層次結構: 執行代碼: 執行---->> A - Able被打印出來。 為什么? 編譯器如何知道應該調用哪個函數? 當決定調用什么函數 - 運行時或編譯時? 如果我玷污一個新的class C ...

CTRP派生類中沒有名為“ type”的類型

[英]No type named 'type' in CTRP derived class

我一直在為通用的單參數函子試驗“ 好奇地重復模板模式” ,並有兩種實現:一種使用有效的模板模板參數,另一種實現在接口類中嘗試訪問派生的Functor :: type。 在后一個示例中,編譯器(gcc 5.4.0)報告 錯誤 :“結構多維數據集<double>”中沒有名為“ ...

在NVI習語下,為什么虛擬功能不能公開?

[英]Under the NVI idiom, why can't the virtual function be public?

C ++私有和受保護的虛擬方法 , 是否有不使用公共虛擬方法的正當理由? 在談論非虛擬接口( NVI )和非公共虛擬功能及其共生。 斯科特·邁耶斯(Scott Meyers)在有效的C ++中還說 有時虛擬功能甚至必須是公共的,但是NVI習慣用法實際上並不能應用。 我看不到 ...

Android活動生命周期:為什么不首先執行調用super方法?

[英]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 ++中的接口,主要是為了使用具有默認值的參數(從而避免由於默認參數被靜態綁定而導致的問題)。 我為我的班級提供了一個相當簡單的聲明,看起來像這樣: 我知道在頭文件中提供函數體會自動將函數標記為內聯的候選函數(雖然我不知道將該定義放在 ...

C#中的非虛擬方法,靜態綁定和接口

[英]Non-virtual methods, static binding, and interface in C#

我知道非虛擬方法是靜態綁定的,據我所知,這意味着在編譯時它本身就知道將在哪個對象上調用哪種方法。 該決定是基於對象的靜態類型進行的。 使我感到困惑的是接口 (而不是class )和靜態綁定。 考慮一下這段代碼, 演示代碼: http : //ideone.com/JOVmi ...

非虛擬接口-如何調用正確的虛擬功能

[英]Non-Virtual Interface - how to invoke the correct virtual function

我有一個看起來像這樣的層次結構: 所以問題是當我使用Base類創建派生類時如何使用此模式調用Execute()。 就我而言,我不想直接創建Derived,因為我有多個從Base派生的類,並且根據某些條件,我必須選擇一個不同的派生類。 有人可以幫忙嗎? ...

私有純虛函數有什么意義?

[英]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,因此,將不會進行虛擬調用。 我想念什么嗎 ...

私有方法模式的私有重寫? (答案:NVI)

[英]private overrides of private methods pattern? (ANSWER: NVI)

描述僅可虛擬調用並從基礎中的其他方法調用的方法的公認術語(如果有)是什么? 我偶爾會看到這被稱為回調,但這似乎與該術語的原始定義相去甚遠。 我什至不確定是否應該將其稱為模式,但是我正在嘗試在注釋代碼方面變得更加精確。 謝謝您的幫助! 摘要 :這似乎被稱為非虛擬接口模式,這是模板方法 ...

如何使用 C++ 中的非虛擬接口習語來實現接口類?

[英]How to implement an interface class using the non-virtual interface idiom in C++?

在 C++ 中,接口可以由其方法是純虛擬的類來實現。 這樣的類可以是庫的一部分,用於描述對象應該實現哪些方法才能與庫中的其他類一起工作: : 現在我想使用類Lib::Bar ,所以我必須實現IFoo接口。 出於我的目的,我需要一個完整的相關類,所以我想使用一個基類來保證使用 NVI 習 ...

非虛擬接口(NVI)習慣用法在C#和C ++中一樣有用嗎?

[英]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?

非虛擬接口慣用語描述了虛擬方法如何是非公共定制點,而公共方法是非虛擬的,以允許基類始終控制如何調用定制點。 這是一個優雅的習慣用法,我喜歡使用它,但是如果派生類本身是基類,它如何工作 ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM