GuiObject クラスから派生した GUI オブジェクトが Serialiser と Deserialiser を登録できるシステムをセットアップしようとしています。これにより、クラス エイリアスのみに基づいて XML ファイルとの間でシリアライズ/デシリアライズできます。例えば:
class Button : public GuiObject
{
// ...
};
Button
XML では次のようになります。
<button>
[...]
</button>
GuiObject
したがって、クライアントコードは、オブジェクトのプレースホルダーを使用して派生物に対してシリアライザーとデシリアライザーを登録し、関数を呼び出すことができます。
typedef boost::function<void(ticpp::Element*)> serialisation_function;
// ...
serialisation_function serialiserFunc(boost::bind(&Button::WriteElement, _1, _2));
GuiObjectXmlSerialiser buttonSerialiser("button", serialiserFunc);
guiObjectXmlFactory.registerSerialiser(buttonSerialiser);
Button::WriteElement
次のようになります。
virtual void WriteElement(ticpp::Element* element) const;
GuiObjectXmlSerialiser.h:
typedef boost::function<void(ticpp::Element*)> serialisation_function;
// Serialises a GuiObject via a creation and serialisation function, storing
// a class name to differentiate it between others.
class GuiObjectXmlSerialiser
{
public:
GuiObjectXmlSerialiser(const std::string& class_alias,
serialisation_function serialisation_func);
void serialise(gui_object_ptr object, ticpp::Element* element);
private:
std::string class_alias;
serialisation_function serialisation_func;
};
GuiObjectXmlSerialiser.cpp:
GuiObjectXmlSerialiser::GuiObjectXmlSerialiser(const std::string& class_alias,
serialisation_function serialisation_func)
: class_alias(class_alias)
, serialisation_func(serialisation_func)
{
}
void GuiObjectXmlSerialiser::serialise(gui_object_ptr object, ticpp::Element* element)
{
serialisation_func(object, element);
}
serialisation_func(object, element);
現在、次の行でこのエラーが発生しています。
error C2064: term does not evaluate to a function taking 2 arguments
そのため、関数を呼び出すと同時に使用するオブジェクトを指定して、メンバー関数を呼び出すためにオブジェクトを渡すのを遅らせる方法を知りたいです。私はこれをしばらく見つめていましたが、役に立ちませんでした。
乾杯。