2009-08-21 70 views

回答

4

AFAIK它不是一個在官方定義的任何地方出現的術語。可能有人在說simulated dynamic binding

編輯:一個迅速的網絡搜索表明有人可能已經實現了自己的動態多態,所以他們可能有自己的vtable。然後,「僞虛擬」函數將是通過其機制訪問的函數,而不是像C++編譯器理解的那樣實際上是虛擬函數。

這樣做的一個原因是實施multi-dispatch

您有任何可以指出我們的情況嗎?

+0

是的,它似乎與模擬動態綁定有關。上下文是一種優化多線程動畫和在3d引擎上構建變形系統的機制,因此它很有意義。非常感謝。 – 2009-08-23 02:53:22

0

帶聲明的虛擬函數。

class Foo 
{ 
    int* bar; 

    Foo() : bar(0) { bar = new int; } 
    virtual ~Foo() { delete bar; } 
} 

這有一個僞虛擬析構函數,因爲它在聲明中做了一些事情。這是一個純粹的虛擬聲明:

class Foo 
{ 
    Foo() { } 
    virtual ~Foo()=0; 
} 

至少,我這是怎麼學的。

+0

是的,我記得那個,並在那裏編輯它。 – jkeys 2009-08-21 23:06:18

+0

您可能是指**定義**。任何可以使用的東西都有一個聲明。此外,還可以定義純虛函數。 – Asik 2009-08-22 00:17:08

+0

對不起,我總是忘記用於描述編程語言的術語必須是完全明確的。對不起,我沒有接受過正式培訓(還沒有?)。 – jkeys 2009-08-22 01:35:31

1

我聽到這個術語來使用,是指多方法(在C++這些通常使用函數指針陣列,其中所述選擇器偏移由代碼在運行時確定實現):

(*multiMethod[ index ])() 

的多重方法陣列只是一個函數指針數組。

2

我從來沒有聽說過這個詞。我猜他們或者在談論Non-Virtual Interface idiom (NVI),或者他們正在討論如何構建一個函數指針的調度表,這是如何在C中實現多態/虛函數的(實際上是C++編譯器如何在後臺執行它)。

+0

當我讀到這個問題時,NVI是我想到的第一件事情.... – Dan 2009-08-22 15:47:03

相關問題