C++でxtalのiteratorをもっと簡単に定義する
id:toge:20070524#1180029956 の続き。
id:xtalcoさんにもっと簡単な方法を聞きました。
#include "xtal/xtal.h" class IterTest { int value_; public: IterTest(int value) : value_(value) {} void iter_next(const xtal::VMachine& vm) { if (value_ > 10) { vm.return_result(xtal::Null()); return; } vm.return_result(xtal::UserData<IterTest>::from_this(this), xtal::Any(value_)); value_++; } }; int main() { // Xtalの初期化 xtal::initialize(); try { xtal::TClass<IterTest> itertest("IterTest"); // IterTest クラスを構築 itertest.inherit(xtal::Iterator()); itertest.def("new", xtal::New<IterTest, int>().param(xtal::Named("value", 0))); itertest.method("iter_first", &IterTest::iter_next); itertest.method("iter_next", &IterTest::iter_next); xtal::lib().def("IterTest", itertest); xtal::Any ret = xtal::lib().member("iterator"); } catch(xtal::Any ex) { std::cout << ex << std::endl; } return 0; }