Article ID: 158232 - Last Review: November 18, 2003 - Revision: 2.0

STL Sample for the unary_functi

This article was previously published under Q158232

On This Page

Expand all | Collapse all

SUMMARY

The sample code below illustrates how to use the unary_function STL structure in Visual C++.

MORE INFORMATION

Required Header

   <functional>
				

Prototype

   template<class _A, class _R>
   struct unary_function
   {
     typedef _A argument_type;
     typedef _R result_type;
   };
				
NOTE: The class/parameter names in the prototype may not match the version in the header file. Some have been modified to improve readability.

Description

unary_function is used as a base class to allow us to better define operator functions in the following format:
   result_type classname::operatorX(argument_type)
				

Sample Code

//////////////////////////////////////////// 
// 
// Compile options needed: none
// 
// Structure used:
//       unary_function<int, float> - allows us
//       to write operator functions accepting an
//       integer and returning floats.
// 
// Written by Mark Hagen
// of Microsoft Product Support Services,
// Copyright (c) 1996 Microsoft Corporation.
// All rights reserved.
//////////////////////////////////////////// 

#include <functional>
#include <iostream>
using namespace std;

/* derive class from unary_function in order to use it */ 

class unary_test : public unary_function<int,float>
{
public:
  float value;
  unary_test(){value=10.0;}
  unary_test(float x){value=x;}
  result_type operator*(argument_type x);
  result_type operator-(argument_type x);
};

/* You can now easily create operators that accept */ 
/* an int and return a float.                     */ 

unary_test::result_type unary_test::operator*(unary_test::argument_type x)
{
  value*=x;
  cout << "New value after * is " << value << endl ;
  return value;
}

unary_test::result_type unary_test::operator-(unary_test::argument_type x)
{
  value-+(float)x;
  cout << "New value after minus is " << value << endl ;

  return value;
}

void main(void)
{
  unary_test item;
  unary_test item2(18.0);

  cout << "Begin" << endl ;
  cout.setf(ios::fixed) ;
  item = item * 2;
  item2 = item2 - 5;
}
				
Program Output is:
Begin
New value after * is 20.000000
New value after minus is 18.000000
				

REFERENCES

Visual C++ Books On Line: Visual C++ Books:C/C++:Standard C++ Library Reference.

APPLIES TO
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • The Standard C++ Library
Keywords: 
kbhowto KB158232
Retired KB ArticleRetired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
 

Article Translations