我正在尝试使用访问者模式来序列化对象的内容。然而,我遇到的一个障碍是当我访问字符串时。我的字符串是模板类型,类似于 STL 的 basic_string。所以像:
basic_string<char_type, memory_allocator, other_possible_stuff> \\ many variations possible!
因为我可以有很多不同的模板化字符串类型,所以我不能将它们添加到我的访问者界面中。这将是荒谬的。但我无法将模板添加到我的 VisitString 方法,因为 C++ 阻止在虚拟方法中使用模板参数。
那么我有什么选择来解决这个问题?
编辑:我添加了一些基本代码
class IVisitor
{
public:
virtual void VisitString(some_kind_of_string_type string) = 0; // this is what I want in theory
};
class MyObject
{
public:
typedef basic_string<char8, myAllocator, some_flag> MyStringType;
Accept(IVisitor* visitor)
{
visitor->VisitString(mString);
}
private:
MyStringType string;
};
class MyOtherObject
{
public:
typedef basic_string<char16, myOtherAllocator, some_other_flag> MyOtherStringType;
Accept(IVisitor* visitor)
{
visitor->VisitString(mString);
}
private:
MyOtherStringType string;
};
class Reader : public IVisitor
{
public:
virtual void VisitString(some_kind_of_string_type string)
{
// read some data, give it to the string
}
}