我有一個類,我想使用生成器模式,但它是從我需要訪問的屬性的基類派生的。即使我從BaseClass
或其他同樣臭的東西中派生出Builder,我也無法在我的實現中訪問BaseClass
的成員。我的課:繼承的C++ Builder模式
BaseClass.h:
class BaseClass
{
protected:
CString name;
}
DerivedClass.h:
class DerivedClass : public BaseClass
{
public:
// builder starts here and has the same base class as the class it is nested in
// (if it doesn't, we can't get access to name)
static class Builder : public BaseClass
{
public:
Builder::Builder(CString pName)
{
this->name = pName;
}
Builder Builder::Description(CString pDescription)
{
this->description = pDescription;
return *this;
}
};
public:
CString description;
};
DerivedClass.cpp:
DerivedClass::DerivedClass(Builder builder)
{
this->name = builder.name; // this is NOT ok
this->description = builder.description; // this is ok
}
我的問題是,我無法訪問builder.name
。 Visual Studio說「受保護的成員BaseClass::name
不能通過DerivedClass::Builder
指針或對象訪問」。我已經嘗試做的BaseClass
擺弄,但無濟於事。這個post也提供了一個解決方法,但是它對於Java而言非常混亂。
是否有一個體面的方式來使用C++繼承構造模式?
這看起來正是我在找的東西,謝謝! – aguazales
訪問規則已在C++ 11中更新。嵌套類現在可以訪問封閉類可以訪問的所有名稱(請參見[this](http://en.cppreference.com/w/cpp/language/nested_types))。 – Excambion