(a)
virtual void invoke() {
str->getline(cp,siz);
}
(b)
virtual void invoke() {
*str >> *d;
}
(c)
template<typename STREAM, typename DATATYPE>
class input_target : public iotarget {
private:
STREAM *str;
DATATYPE *d;
public:
input_target(STREAM *isp,DATATYPE *data): str(isp),d(data) {}
virtual void invoke() { *str >> *d; }
};