用c++11封装win32界面库 (五)

2014-11-24 03:23:30 · 作者: · 浏览: 4
值后返回owner, 以便下一个链式赋值

owner_t& operator(const value_t& val) {
value = val;
return *owner;
}
};
struct initor {
attr text;
attr visible;

initor() {
text.owner = this;
visible.owner = this;
}
};
后来发觉,这个initor是不可扩展的


[cpp]
struct checkbox_initor : initor {
attr checked;
checkbox_initor() {
checked.owner = this;
}
};

checkbox_initor().checked(true).text("."); // 这样ok
checkbox_initor().text(".").checked(true); // 这样不行,因为.text(".")返回一个initor基类,不具备checked

struct checkbox_initor : initor {
attr checked;
checkbox_initor() {
checked.owner = this;
}
};

checkbox_initor().checked(true).text("."); // 这样ok
checkbox_initor().text(".").checked(true); // 这样不行,因为.text(".")返回一个initor基类,不具备checked
解决办法是给基类 initor 加上模板参数


[cpp]
template
struct initor {
attr text;
attr pos;
...
};

template
struct initor {
attr text;
attr pos;
...
};
详见 initor.h

每种控件对应的initor,用traits来定义:


[cpp]
// wnd_traits 定义
template
struct wnd_traits {
typedef initor::wnd initor_t;
};

// 针对按钮的特化
struct button;

template<>
struct wnd_traits