2013-07-23 136 views
0

說我有這樣的設置:從基類調用派生類構面的方法嗎?

std::locale::global(std::locale("en_US.UTF8")); 
stream.imbue(std::locale()); 

當我嘗試調用使用std::use_facet一個方面的一個實例的方法,將其派生類小的(即「綽號」小)方法實際上調用?例如,做到這一點:

std::use_facet<std::ctype<char>>(stream.getloc()).is(/*... */); 

做等價的東西概念這樣:

std::ctype_byname<char>("C").is(/* ... */); 

我想,這是因爲一些派生類方面(在這種情況下std::ctype_byname)實現虛擬功能的情況下的基類。我有權利承擔這一點嗎?

回答

0

不,這將是對將返回的std::ctype<char>構面的引用。 std::ctype構面的方法(在構建其語言環境時沒有默認構建)將根據其安裝的語言環境進行操作。使用副名方面意味着你需要一個特定的文化習俗來應用其可能與其語言環境不同的方法。它填充與基類facet相同的插槽,因此use_facet將不會返回一個byname facet。

相關問題