ビジターパターンを使用してオブジェクトのコンテンツをシリアル化しようとしています。しかし、私が打っている問題の1つは、文字列にアクセスしているときです。私の文字列は、STLのbasic_stringに似たテンプレートタイプです。だから次のようなもの:
basic_string<char_type, memory_allocator, other_possible_stuff> \\ many variations possible!
非常に多くの異なるテンプレート文字列タイプを使用できるため、それらを訪問者インターフェイスに追加することはできません。それはばかげているでしょう。しかし、C ++では仮想メソッドでテンプレートパラメーターを使用できないため、VisitStringメソッドにテンプレートを追加できません。
では、これを回避するための私のオプションは何ですか?
編集:私はいくつかの基本的なコードを追加しました
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
}
}