第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么派生的模板類(lèi)無(wú)法訪問(wèn)基本模板類(lèi)的標(biāo)識(shí)符?

為什么派生的模板類(lèi)無(wú)法訪問(wèn)基本模板類(lèi)的標(biāo)識(shí)符?

C++
肥皂起泡泡 2019-11-12 11:19:37
考慮:template <typename T>class Base{    public:        static const bool ZEROFILL = true;        static const bool NO_ZEROFILL = false;}template <typename T>class Derived : public Base<T>{    public:         Derived( bool initZero = NO_ZEROFILL );    // NO_ZEROFILL is not visible        ~Derived();}我無(wú)法使用GCC g ++ 3.4.4(cygwin)進(jìn)行編譯。在將它們轉(zhuǎn)換為類(lèi)模板之前,它們是非泛型的,派生類(lèi)能夠查看基類(lèi)的靜態(tài)成員。C ++規(guī)范的要求中是否存在這種可見(jiàn)性損失,還是我需要采用語(yǔ)法更改?據(jù)我了解,每個(gè)實(shí)例Base<T>都會(huì)有它自己的靜態(tài)成員“ ZEROFILL”和“ NO_ZEROFILL”,這Base<float>::ZEROFILL和Base<double>::ZEROFILL是不同的變量,但我真的不關(guān)心; 該常量用于代碼的可讀性。我想使用靜態(tài)常量,因?yàn)榫兔Q(chēng)沖突而言,這比使用宏或全局方法更安全。
查看完整描述

3 回答

?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊

這是您的兩階段查找。


Base<T>::NO_ZEROFILL(所有大寫(xiě)字母標(biāo)識(shí)符均為boo,宏除外,BTW)是取決于的標(biāo)識(shí)符T。

因?yàn)楫?dāng)編譯器第一次解析模板時(shí),還沒(méi)有實(shí)際的類(lèi)型可以替代T,所以編譯器不會(huì)“知道”什么Base<T>。因此,它無(wú)法知道您假定要在其中定義的任何標(biāo)識(shí)符(可能會(huì)有某種特殊化,T編譯器稍后會(huì)看到),并且您無(wú)法從基類(lèi)中定義的標(biāo)識(shí)符中忽略基類(lèi)限定條件。


這就是為什么您必須寫(xiě)B(tài)ase<T>::NO_ZEROFILL(或this->NO_ZEROFILL)。這告訴編譯器這NO_ZEROFILL是基類(lèi)中的內(nèi)容,它取決于T,并且它只能在實(shí)例化模板時(shí)稍后進(jìn)行驗(yàn)證。因此,它將接受它而不嘗試驗(yàn)證代碼。

當(dāng)通過(guò)為提供實(shí)際參數(shù)實(shí)例化模板時(shí),只能稍后驗(yàn)證該代碼T


查看完整回答
反對(duì) 回復(fù) 2019-11-12
?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

試試這個(gè)程序


#include<iostream>

using namespace std;

template <class T> class base{

public:

T x;

base(T a){x=a;}

virtual T get(void){return x;}

};

template <class T>

class derived:public base<T>{

public:

derived(T a):base<T>(a){}

T get(void){return this->x+2;}

};

int main(void){

base<int> ob1(10);

cout<<ob1.get()<<endl;

derived<float> ob(10);

cout<<ob.get();

return 0;

}

在T get(void){return this->x+2;}直插U還可以使用范圍解析(::)運(yùn)營(yíng)商。例如,嘗試用


T get(void){return base<T>::x+2;}


查看完整回答
反對(duì) 回復(fù) 2019-11-12
  • 3 回答
  • 0 關(guān)注
  • 553 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)