(Я прочитал несколько существующих вопросы, касающиеся этого вопроса, и они, кажется, немного отличаются и не делаю вопрос яснее для меня.)Вектора шаблон класса
Я пытаюсь создать вектор ключа -значные пары, в которых значение является общим. Код, который логически указывает то, что мне нужно следующим образом:
#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, будет означать, что базовый класс также должен был быть общим для меня, чтобы определить его там, что означает, что я вернулся туда, где я начал?
Оказание помощи; что мне здесь не хватает?
Вы не очень упускаете из виду. Я полностью сбросил бы геттер и сеттер и вместо этого использовал шаблон посетителя для проверки. –
Поскольку CCmd является классом шаблонов - это не так: «std :: vector»? –
Matthias
@ Matthias Да, я написал код, который «логически указал», что мне нужно. – Doddy