수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1620988
  • Today | 368
  • Yesterday | 482

1 Articles, Search for 'pair'

  1. 2007/03/01 pair 라는 것의 용도는?
Programming/Win32 API2007/03/01 18:14

pair 라는 것의 용도는?

원본 : http://www.debuglab.com/knowledge/pair.html

1.요약

이런 고민을 해 보신적이 있으시죠? 포인터형을 반환하는 함수라면 예외상황을 알리기 위해서 NULL을 반환하면 되는데, 기본형이나 객체 혹은 레퍼런스 타입을 반환하는 경우라면 NULL 처럼 분명한 값이 없습니다.

EOF처럼 특정한 값을 에러값으로 정의해 놓는다거나 HRESULT 처럼 비트별로 의미를 부여하는 방법이 거의 대부분일 것입니다.

pair는 이런 경우에 한 번쯤은 생각해 볼 수 있는 템플릿 클래스 입니다.


2.본문

pair는 다음과 같이 단순합니다.

template<class T, class U> 

    struct pair { 

    typedef T first_type; 

    typedef U second_type 

    T first; 

    U second; 

    pair(); 

    pair(const T& x, const U& y); 

    template<class V, class W> 

        pair(const pair<V, W>& pr); 

    }; 

두 개의 멤버 변수를 가진 구조체 정도로 생각하시면 딱 맞습니다. 이정도 클래스라면 직접 만들어서 쓰는 것도 나쁘지는 않겠죠. 하지만 pair는 표준입니다.

간단한 예제를 살펴보겠습니다.

[예제 - Windows Console Application]

// pair.cpp : Defines the entry point for the console application. 

// 



#include "stdafx.h" 

#include <utility> 

using namespace std; 



typedef pair<bool, int> RET_TYPE; 



RET_TYPE Func() 

{ 

    return make_pair( false, 3571); 

    //return RET_TYPE( false, 3571); 

} 



int main(int argc, char* argv[]) 

{ 

    RET_TYPE ret = Func(); 

    

    if( false == ret.first ) 

    { 

        return ret.second; 

    } 

    

    return 0; 

} 

[예제 설명]

#include <utility> 

using namespace std; 

pair 클래스와 make_pair 함수는 utility에 선언되어 있습니다. 역시 STL의 일부이기 때문에 std라는 이름의 네임스페이스 안에서 선언되어 있습니다.

--------------------------------------------------------------

typedef pair<bool, int> RET_TYPE; 

우리의 용도에 맞는 pair 클래스형을 선언하는 순간입니다.
각각 bool과 int형을 갖는 멤버 2개를 갖는 것을 의미하겠죠.

--------------------------------------------------------------

return make_pair( false, 3571); 

make_pair 함수는 하나의 pair 객체를 생성해서 반환하는 함수 입니다. pair객체의 타입은 매개변수의 의존해서 결정합니다.

여기서는 각각 bool, int 형인 false, 3571을 넘겨주었으므로 make_pair 함수는 pair 형의 값을 반환하겠죠.

좀 더 추상적으로 생각하자면, 우리의 함수는 실패했다는 false와 실패의 원인인 3571을 함께 반환하고 있습니다.

--------------------------------------------------------------

//return RET_TYPE( false, 3571); 

이 부분은 주석 처리해두었죠. 위의 return make_pair...; 대신에 이 문장을 사용해도 같은 결과를 얻을 수 있습니다. 이유는 pair 클래스는 이미 두 개의 인자를 갖는 생성자를 가지고 있기 때문입니다.

--------------------------------------------------------------

    if( false == ret.first ) 

    { 

        return ret.second; 

    } 

반환값이 실패를 의미한다면, 다시 실패의 원인을 반환하면서 프로그램은 종료합니다.

--------------------------------------------------------------

유틸리티라는 것이 이렇게 사용하기 힘들어서야 되겠냐라고 반문하시는 분이 계실 수도 있겠네요. 이 글의 의미는 각자 받아들이시길 바랍니다.



3.예제



4.참고

MSDN
The Practice of Programming
The C++ Programming Language


- 2001.08.13 Smile Seo -

"Win32 API" 카테고리의 다른 글
  • 실수(소수점) 나누셈 연산을 정수 연산으로 하기 (0)2007/03/01
  • WORD 특정 비트값 알아내기 (0)2007/03/01
  • pair 라는 것의 용도는? (0)2007/03/01
  • Alt+F4 키로 종료되는거 막는 방법 (0)2007/03/01
  • 문자열을 _T() 형으로 바꿔주는 매크로 (0)2007/03/01
2007/03/01 18:14 2007/03/01 18:14
Posted by webdizen
Tags pair
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2650

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • Coding
  • 생성자
  • 소스코드
  • ETRI
  • Standard
  • 데이터 웨어 하우스
  • ASCII Character Codes
  • TPC-D
  • 음악
  • Assembly
  • 프로필
  • NBTScan
  • 의암관
  • 데이터와 형
  • 올림픽 공원
  • Garbage Collection
  • 라이브락
  • 영상바이오관
  • CEdit
  • 암기

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 11/21
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.