(我讀過關於這個問題的幾個存在的問題,他們似乎略有不同,不要使這個問題更清楚給我。)矢量模板類的
我試圖創建密鑰的矢量值是通用的值對。這邏輯表示什麼,我需要的代碼如下:
#include <stdio.h>
#include <string.h>
#include <vector>
template <typename T>
class CCmd
{
protected:
char name[64];
T value;
public:
CCmd(char* _name, T _value)
{
strcpy(name, _name);
value = _value;
}
T getValue()
{
return value;
}
void setValue(T _value)
{
value = _value;
}
};
int main()
{
std::vector<CCmd*> vec;
vec.push_back(new CCmd<int>("gravity", 150));
vec.push_back(new CCmd<char*>("configfile", "config.cfg"));
printf("Value = %d\n", vec[0]->getValue());
printf("Config = %s\n", vec[1]->getValue());
return EXIT_SUCCESS;
}
這種失敗在各個方面我認爲這將是語法正確編譯。我讀了一個問題,使用一個基類來封裝通用類是必需的,但是我所指示創建一個空的類嘗試這樣做,讓我的泛型類它的一個子類:
...
class CCmdBase
{
};
class CCmd : public CCmdBase
{
...
和編譯器抱怨那CCmdBase
沒有一個名爲getValue
的成員,因爲它返回泛型類型T,這意味着基類也需要是泛型的,以便在其中定義它,這意味着我回到了我所在的位置開始了嗎?
請幫忙;我在這裏錯過了什麼?
您不會錯過太多。我會完全放棄吸氣劑和吸氣劑,並使用訪問者模式進行檢查。 – 2014-09-30 18:51:32
因爲CCmd是一個模板類 - 是不是這個錯誤:「std :: vector」? –
Matthias
2014-09-30 18:55:11
@Matthias是的,我寫了「邏輯表示」我需要的代碼。 – Doddy 2014-09-30 18:56:12