我已閱讀有關爲什麼static virtual
方法沒有任何意義 - 或者函數是virtual
,因此它可以被實現覆蓋,或者它是static
,因爲類型在編譯時是已知的,不能兼得。我不知道是否有一種方法做什麼我想:C++靜態模板子類
我有相同的基本結構在一些預配置值讀:
// in some header
template < typename TYPE >
class Reader {
public:
static TYPE getValue() {
static TYPE value;
static SomeFileClass(filename, &value, sizeof(value));
return value;
}
};
class OneValue : public Reader<uint16_t> {
public:
static const char* filename;
};
// and maybe OtherValue : public Reader<SomeUserType> {}; etc etc.
// in main.cpp, for example
const char* OneValue::filename = "onevalue.txt";
這一點,並在此進行各種變化,失敗。首先它說filename
沒有在Reader
中聲明,這聽起來很合理;所以後來我在那裏宣佈了一個static const char* filename
,並且故意將Reader::filename
與OneValue::filename
相關聯,因爲當我稍後使用它時,我會打電話給OneValue::getValue()
- 我知道我叫它時的類型。
但是,這是行不通的,因爲Reader::filename
沒有定義,但是當我定義它時,它表示模板沒有使用模板參數,這聽起來像是一個合理的錯誤,但現在我沒有想法。
有沒有辦法乾淨地做我想要的,沒有大量的代碼複製?我接受全新的公式,只是希望它清晰簡明 - 上面的代碼,雖然它有人爲的名字,實際上是我希望實現的整個Reader
類,所以在每個類中重新定義一些getValue()
派生類比預期的工作更多,因爲它可能需要更多的線來派生和重寫,而不是僅爲每個類重新實現getValue()
。
啊,我看到的是一個在提到另一個問題,但起初並不完全理解。 – dwanderson
現在這樣做更有意義。真棒,謝謝,正是我需要的! – dwanderson