我目前正在寫的一類,它允許獲取和設置INTERAL程序選項,它應該是相當靈活,易於使用。 具體而言,一個選項由枚舉類型和值類型標識,它們具有一對一的關係。例如,枚舉IntType上意願包含具有INT類型的選項。如果兩個模板的類型鏈接,如何使用策略模板?
我心目中的下面的代碼,但不知道如何得到它的工作或我是否想在某種程度上我不應該使用的模板。
enum IntType {OPTION1, OPTION2}
enum StringType { OPTION3, OPTION4}
template<class T, class T2>
class Policy{
public:
T2 getValue(const T& a);
void setValue(const std::string& name, const T2& a);
...
}
class A: public Policy<IntType, int>, public Policy<Stringtype, std::string>, ...{
...
}
每個枚舉常數具有一個相關聯的字符串表示,這是不變的,但選擇也作爲字符串輸入到程序中,所以必須要能夠從我應該改變哪個選項的字符串來推斷。
但顯然,不能用此代碼來直接調用設置或獲取價值,而不必限定其全模板特殊化。所以
A* a = ...
a->setValue("intoption", 5);
將無法正常工作。
上我應該用什麼來得到這個工作的任何指針?
關於如何在編譯時派生出OPTION1映射到int和IntType的部分答案,也會很棒。
由於提前, Broes
你的第一個模板參數是你的枚舉嗎?爲什麼不簡單通過價值傳遞呢? – Geoffroy
我更新了問題,因爲枚舉規範不夠清楚。 –
好吧,現在我明白你的意思了;) – Geoffroy