블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-29 07:22
내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다.  - 최익필

저번 26항목에서 각 iterator 간의 변환 과정을 그림(?) 으로 보여 주었었다.

              const_iterator
         ↗                       ↖
iterator                              ↖  base()
         ↘↖base()                   ↖
              reverse_iterator    →   const_reverse_iterator


다시 정리 하자면,
1. 화살표 방향은 컴파일러에 의해서 암시적으로 바뀐다.(안그런 컴파일러도 있으니 해결방법은 26항목)
2. base() 는 함수이고, 명시적으로 사용자가 호출해야지만, 변환이 가능하다는 것이다.

여기서 잠깐,
혹시 iterator 를 casting 하면 되지 않을까? 란 생각을 했다면, 아직 iterator 가 어떻게 구현되었는지 분석하지 않은듯 보이는데, iterator는 .. class객체이며, 각 iterator 마다 각기 다른 class 이다. 그렇기 때문에 cating 을 해도 정상 작동하지 않는다.

본론으로 들어와서.. const_iterator ---> iterator 방향으로 변환이 되지 않는데, 어떻게 저자는 바꿀수 있다고 할수 있는가?
그 꽁수가 distance 함수와 advance 함수를 사용하는것이다. 아래 코드도 포함한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
// ikpil.com or ikpil.tistory.com
// MSVC2005 distance 내부
template<class _InIt> inline
    typename iterator_traits<_InIt>::difference_type
    __CLRCALL_OR_CDECL distance(_InIt _First, _InIt _Last)
{   // return distance between iterators
    // typename 잘 썻고~ Off 선언하고~
    typename iterator_traits<_InIt>::difference_type _Off = 0;
    // 두 인자 사이의 거리를 Off에 기록 하고
    _Distance2(_First, _Last, _Off, _Iter_cat(_First));
    // Off 리턴~
    return (_Off); 
}

즉 두 같은 타입의 두 iterator를 받아 드리어, 그 사이를 리턴해 준다.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// ikpil.com or ikpil.tistory.com
// MSVC2005 advance 내부
template<class _InIt,
class _Diff> inline
    void __CLRCALL_OR_CDECL advance(_InIt& _Where, _Diff _Off)
{   // increment iterator by offset, arbitrary iterators
    // 레퍼런스로 받은 Where 을 다시 _Advace에 넣는다.
    _Advance(_Where, _Off, _Iter_cat(_Where));
}
// MSVC2005 _Advance 내부
template<class _InIt,
class _Diff> inline
    void __CLRCALL_OR_CDECL _Advance(_InIt& _Where, _Diff _Off, input_iterator_tag)
{   // increment iterator by offset, input iterators
 
#if _HAS_ITERATOR_DEBUGGING
    //  if (_Off < 0)
    //      _DEBUG_ERROR("negative offset in advance");
#endif /* _HAS_ITERATOR_DEBUGGING */
 
    for (; 0 < _Off; --_Off)
        // &로 받은 .. Where을 전위연산하여 Off 만큼 증가 시킨다.
        ++_Where;
}

std::advace()의 인자값으러 넣은 iterator를 Off 길이 만큼 이동 시켜 준다.


자.. 두 함수의 설명은 끝났고. 이제 이 두 함수를 이용하여, const_iterator 를 iterator 로 변환해 보자. 주의해야 할것은 std::distance 는 한가지 타입의 iterator만 받는 템플릿 함수이므로 그냥 호출하면 const_iterator 를 iterator 로 변환을 시도하여, 컴파일타임 에러를 발생시킬 것이다.


그래서 명시적으로 const_iterator 라고 알려 주기만 하면 된다. 그래서 아래의 코드처럼 하면 iterator 로 변환 완료!
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
31
32
// ikpil.com or ikpil.tistory.com
 
#include <deque>
#include <algorithm>
#include <iostream>
 
typedef std::deque<int> Container;
 
int main( void )
{
    Container Test;
     
    Test.push_back(1);
    Test.push_back(1);
    Test.push_back(1);
    Test.push_back(1);
 
    typedef Container::const_iterator Const_It;
    Const_It cit = Test.end(); // 끝을 가리키게 한다.
 
    typedef Container::iterator Nomal_It;
    Nomal_It it = Test.begin(); // 꼭 초기화를 해줘야 한다.
     
     
    // distance 는 템플릿 함수이므로 명시적으로 지정 가능하다.
    std::advance(it, std::distance<Const_It>(it, cit));
 
    if( cit == it )    // <-- 왜 cit 을 먼저 썻는지 알 것이다.
        std::cout << "같습니다." << std::endl;
    else
        std::cout << "다릅니다.." << std::endl;
}


그런데 눈치 빠른 분들은 이런 생각을 하게 될 것이다. "이거 쓸때 없는 비용 많이 무는거 같은데..? 거리가 멀면 멀어질수록 더 느려지잖아?" .. 맞다. 역시 당신은 똑똑했다.  그래서 const_iterator 보다 iterator 를 사용하라고 26장에서 설명했던 것이다.


이것 만은 잊지 말자.
1. const_iterator 를 iterator 로 바꿀수 있다!
2. 대신 좀 시간이 걸린다. 속편히 iterator 를 사용하는것을 염두하자.


관련링크
http://lagoons.net/tt/594 <-- 깔끔한 설명
http://alones.kr/blog/626?TSSESSIONaloneskrblog=1e73a3a9327170d3301688495e6aeb41 <-- 다른 경우


반응형
Posted by blueasa
, |
참조 http://msdn.microsoft.com/ko-kr/library/system.runtime.remoting.channels.ipc(VS.90).aspx 

훈스 게시판에 몇일전부터 [프로스세간 통신(IPC)] 과 관련하여 질문이 올라오고 있었는데...

찾아보니 위 참조 링크처럼 심플한게 있다.

구현해본결과 오!! 이런게 되는구나... 


서버와 클라이언트... 예제를 실행한 결과 이미지이다.

클라이언트에서 객체 요청이 있을때마다 서버에서는 원격객체에 값을 + 1 해서 전달해준다.

예제는 서버, 클라이언트, 원격객체 세 프로젝트로 구성된다.

 * 원격객체를 서버, 클라이언트에 각각 참조시켜야 한다.  
  서버에서 정의 하고 클라이언트에서 정의를 또하고 해봤는데 에러가 뜬다 공개토큰이 null이 어쩌고 저쩌고... 삽질..

예제를 올려놓는다.


반응형

'Programming > C#' 카테고리의 다른 글

C# 쓰레딩 [멀티쓰레딩]  (0) 2010.11.04
WinForm 컨트롤에서 메시지 처리 팁  (0) 2010.11.04
외부 프로그램 실행  (0) 2010.10.28
작성된 프로그램에 의해 윈도우종료가 문제될 때  (0) 2010.10.28
nullptr  (0) 2010.10.26
Posted by blueasa
, |

- 현재의 프로그램에서 외부 프로그램을 실행할 때 다음과 같이 사용한다.

 

   System.Diagnostics.Process.Start("파일명.exe");

 

- 도움말 호출 방법.

  

   System.Windows.Forms.Help.ShowHelp();



출처 : http://blog.naver.com/ansysda/3191870

 

반응형
Posted by blueasa
, |



트레이에 올려진 프로그램이나 기타 작성된 프로그램이 실행되는 동안

윈도우가 로그오프, 시스템 종료 등을 정상적으로 처리하지 못하는 경우가 있다.

이 때는 Form의 WndProc 메소드를 이용해 해결 할 수 있다.

 

자세한 내용은 첨부된 테스트 프로젝트를 참고하면 된다.


출처 : http://blog.naver.com/ansysda/3191870

반응형

'Programming > C#' 카테고리의 다른 글

IPC .Net ( 프로세스간 통신 )  (0) 2010.11.03
외부 프로그램 실행  (0) 2010.10.28
nullptr  (0) 2010.10.26
[GameDev] KGC 2008 - C#을 사용한 빠른 툴 개발  (0) 2010.10.21
C#에서 C함수 사용하기  (0) 2010.10.20
Posted by blueasa
, |
using System.Text.RegularExpressions;

    static void Main(string[] args)
    {
        string str = "abcwDW2";
        System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[0-9a-zA-Z가-힣]{1,100}$");
          bool ismatch = regex.IsMatch(str);
        if (!ismatch)
        {
            Console.WriteLine("숫자와 영문 소문자,대문자,한글만 입력가능합니다.(글자제한1~100)");
        }
    }



출처 : http://hoons.kr/board.aspx?Name=QAASPNET&BoardIdx=21361&Page=1&Mode=2

 

 

반응형
Posted by blueasa
, |


일본 어느 네티즌이 아내의 이상 행동에 대해 글올리고 질문했는데

능력자들이 그림에 노래까지 만들어 영상으로 만듦...ㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷ

반응형
Posted by blueasa
, |

nullptr

Programming/C# / 2010. 10. 26. 16:06

일본사이트의 내용을 네이버번역 및 수정 한 것입니다. 

nullptr

C++에서 포인터가 아무값도 없을 때NULL을 사용하듯이, 핸들이 아무값도 없을 때는 nullptr을 사용합니다.

초기화하고 있지 않는 핸들은nullptr로 설정되어 있습니다.

nullptr은 C++/CLI의 키워드이며,C++과 같이 0이 아닙니다.

핸들이bool값과 같은 취급을 받을 때는nullptr은 비교를 하는 의미가 됩니다.

String^ s;
if(s)  // if ( s != nullptr )(와)과 같다   ...
bool isnull = !s;  // bool isnull = s ==nullptr; (와)과 같다

[출처] nullptr|작성자 난이s

반응형
Posted by blueasa
, |

[펌] 프로그래머에 관한글

Etc / 2010. 10. 25. 21:22
프로그래밍이란 절대 코딩이 아니다. 먼저 생각하고 만든 것을
  정리하고 문제점을 해결해 나가는 모든 과정이 프로그래밍이다.
  이 점을 자기 자신에게 충분히 납득시켜야 한다. 코딩은 프로그래밍
  의 일부이다.

- 각 언어는 모두 나름의 탄생 이유가 있으면 그 언어를 만든 사람의
  아이디어가 담겨 있다. 언어를 먼저 선택하려 하지 말라.
  유능한 프로그래머는 절대 한 가지 언어에 집착하지 않는다.

언어를 처음 배울 때에는 그에 걸맞게 쉬운 언어부터 시작하라.
  실전에서 사용하는 언어를 먼저 배워두면 더 이득이 될 것이라고
  생각하지 말라. 전문 프로그래머가 되려면 최소한 세 개 이상의
  언어를 익혀야 한다. 물론 세 가지 언어를 똑같이 잘 할 필요는
  없다. 자기 주 종목 언어를 갖지 말라는 말이 아니다.

- 책을 다 읽고 나서야 프로그래밍할 수 있다고 생각하지 말고
  배운 만큼만 갖고도 연습 코드를 작성할 수 있어야 한다.

- 언어 그 자체는 여러분의 상상력을 키워주지 않는다. 상상력은
  여러분 스스로 인생의 모든 영역에서 듣고 배우면서 채워야 한다.
  언어는 상상력을 실현할 도구만 제공할 뿐이다. 과학과 수학에
  관심을 가져 보라(그렇대고 해서 A 등급을 맞을 만큼 잘 할 필요는
  없다).

주석과 문서화 버릇을 들이자. 프로그래밍의 귀찮은 일부가 아니라
  매우 중요한 핵심 부분이다.

- 언어책이 줄 수 있는 지식의 양은 딱 그만큼이다. 여러분의 상상력과
  프로그래밍 능력을 살찌워주는 것은 다른 사람, 다른 프로그래머다.
  적극적으로 프로그래밍 사용자 모임 또는 뉴스그룹에 참여해 남을
  돕고 남으로부터 도움을 받는것이 자기 계발의 원천이다.

자기가 습득한 지식은 자기만이 볼 수 있는 형태든 아니면 홈페이지를
  통해 누구나 볼 수 있는 형태든 상관없이 정리하는 습관을 갖자.
  무엇이든 막상 글로 적으면 자신이 얼마나 피상적으로 알고 있는지
  각성하게 되고 지식을 좀 더 견고하게 만들게 된다.

- 현실은 현실이다. 영어를 잘 못하고 두려워하는 사람이 최고의
  프로그래머가 되기는 거의 불가능하다. 여러분이 한국어만 하면
  한국 프로그래머의 지식만 습득할 수 있을 뿐이다. 영어를 두려워
  하지 않는다면, 그 대가는 전세계 프로그래머의 지식 습득이 된다
  (영어를 잘 하는 방법은 영어를 잘하는 사람에게 물어보라).


반응형
Posted by blueasa
, |

C++/CLI Singleton

Programming/C++/CLI / 2010. 10. 22. 16:12
public ref class MySingleton sealed
{
public:
	static MySingleton (void);
private: MySingleton (void);
public: static property MySingleton ^ mySingleton
{ MySingleton ^ get()
{ return m_mySingleton;
} } private: static MySingleton ^ m_mySingleton;
};

출처 : mine


ref class MyClass {
    // If you use a getter for 'instance' you can avoid 'initonly' keyword
    static MyClass^ instance = gcnew MyClass();

public:
    ...

    static property MyClass^ Instance
    {
        MyClass^ get()
        {
            return instance;
        }
    }
    ...
};

출처 : http://www.ureader.com/msg/14523461.aspx




반응형
Posted by blueasa
, |

작년 11월 14일 KGC 2008에서 발표했던 강연의 문서입니다



 

[출처] [본문스크랩] [GameDev] KGC 2008 - C#을 사용한 빠른 툴 개발|작성자 구리구리

반응형

'Programming > C#' 카테고리의 다른 글

작성된 프로그램에 의해 윈도우종료가 문제될 때  (0) 2010.10.28
nullptr  (0) 2010.10.26
C#에서 C함수 사용하기  (0) 2010.10.20
스레드를 사용하는 2가지 방법  (0) 2010.10.14
재귀함수 호출로 트리뷰 구성  (0) 2010.10.13
Posted by blueasa
, |