| Author: | David Abrahams, Jeremy Siek, Thomas Witt |
|---|---|
| Contact: | dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de |
| Organization: | Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction |
| Date: | 2006-09-11 |
| Copyright: | Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. |
| 概要: | 函數輸出迭代器適配器可以很容易地創建定制化的輸出迭代器。該適配器接受一個單參函數,並創建一個輸出迭代器的 model。每一個賦給該輸出迭代器的數據都被作為參數傳遞給給定的單參函數。定義該迭代器的動機是,創建一個符合標準的輸出迭代器是有些難度的,尤其是 因為正確的實現通常需要一個代理對象。 |
|---|
#include <boost/function_output_iterator.hpp>
template <class UnaryFunction>
class function_output_iterator {
public:
typedef std::output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
explicit function_output_iterator();
explicit function_output_iterator(const UnaryFunction& f);
/* 見下文 */ operator*();
function_output_iterator& operator++();
function_output_iterator& operator++(int);
private:
UnaryFunction m_f; // exposition only
};
UnaryFunction 必須是可賦值和可複製構造的。
function_output_iterator 是可寫和可遞增迭代器概念的 model.
explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());
| 作用: | 構造一個 function_output_iterator 實例,其 m_f 構造自 f. |
|---|
operator*();
| 返回: | 一個未指定類型的對象 r,對於所有 t 滿足 r = t 等效於 m_f(t). |
|---|
function_output_iterator& operator++();
| 返回: | *this |
|---|
function_output_iterator& operator++(int);
| 返回: | *this |
|---|
struct string_appender
{
string_appender(std::string& s)
: m_str(&s)
{}
void operator()(const std::string& x) const
{
*m_str += x;
}
std::string* m_str;
};
int main(int, char*[])
{
std::vector<std::string> x;
x.push_back("hello");
x.push_back(" ");
x.push_back("world");
x.push_back("!");
std::string s = "";
std::copy(x.begin(), x.end(),
boost::make_function_output_iterator(string_appender(s)));
std::cout << s << std::endl;
return 0;
}