我想解決一個包含一個對象(稱之爲圖),包含幾個參數的編程問題。每個參數(Parameter類)可以是幾種類型之一:int,double,complex,string - 僅舉幾例。C++類與模板成員變量
所以我的第一個直覺就是將我的Diagram類定義爲具有模板參數的向量,它看起來像這樣。
class Diagram
{
private:
std::vector<Parameter<T> > v;
};
這不會編譯,我明白爲什麼。因此,基於這些建議How to declare data members that are objects of any type in a class此頁面上,我修改我的代碼看起來像:
class ParameterBase
{
public:
virtual void setValue() = 0;
virtual ~ParameterBase() { }
};
template <typename T>
class Parameter : public ParameterBase
{
public:
void setValue() // I want this to be
// void setValue(const T & val)
{
// I want this to be
// value = val;
}
private:
T value;
};
class Diagram
{
public:
std::vector<ParameterBase *> v;
int type;
};
我無法搞清楚如何調用該函數的setValue用適當的模板參數。在ParameterBase抽象基類中不可能有模板參數。任何幫助是極大的讚賞。
P.S.我沒有使用boost :: any的靈活性。
您不能虛擬設置參數爲任何值,您需要將其轉換爲相應的「參數」類型或刪除該對象並創建一個新對象 –
不要使用setter,然後使用構造函數你總是可以做'v.push_back(新參數(my));' –
爲什麼不把它們轉換成普通類型並在需要時轉換回來?這就是通常這樣的事情。 – KillianDS