我無法從父C++構造函數訪問子類中的字段,我無法使用模板,因爲上游項目沒有使用它們。訪問在沒有模板的構造函數中被重寫的字段
這是工作的Python原型,我嘗試在C++中重新實現。代碼包含兩個驅動程序類 - 一個孩子和一個父代,父代在初始化期間打印該類的name
。
class Driver(object):
name = "Unknown"
def __init__(self):
print(self.name)
class SpecificDriver(Driver):
name = "Specific"
def __init__(self):
super(SpecificDriver, self).__init__()
Driver()
SpecificDriver()
這將打印兩個字符串來安慰
Unknown
Specific
在C++不能訪問重寫name
的樣子,因爲name
沒有在這一點上存在 - Call child method from parent constructor。所以也許有另一種方式獲取驅動程序name
打印初始化?
UPDATE(2018):此問題的原始標題是「在C++中初始化期間打印重寫的子字段,而沒有模板」,它被關閉得太寬泛。
你可以使用靜態多態性又名CRTP。 –
@πάνταῥεῖ是否需要使用模板?在我修補的代碼庫中,我沒有看到它們,它看起來並不簡單。 –
是的,這需要使'Driver'成爲一個模板化的基類,它將派生類作爲類型參數。因此,您可以在每個要訪問「SpecificDriver」成員的地方使用'static_cast(this)'。很簡單恕我直言。 –