Oui c'est correct, mais bien évidemment, tu ne connais pas le type dans la liste chainée, puisque tu n'as que des pointeurs de la classe de base. Mais tu n'as pas besoin de connaitre le type pour ce que tu veux faire (enfin ce que tu sembles vouloir faire).
Mais les définitions suivantes sont surement plus correctes dans ton cas:
class propertyBase
{
string name;
...
public:
virtual bool SetValue(const string &) = 0;
virtual string GetValue() = 0;
}
template <typename T> class property : public propertyBase
{
T value;
...
virtual bool SetValue(const string & _chaine)
{
std::istringstream iss(_chaine);
return ((iss >> value) && (iss.eof());
}
virtual string GetValue()
{
std::ostringstream oss(value);
return oss.str();
}
}
Le champ "string name" est commun à toutes les propriétés, donc autant le placer dans la classe de base.
Bien sur la fonction "SetValue" et "GetValue" ne sont que exemple de ce que tu pourrais avoir.