보관물

‘c++’ 카테고리의 보관물

Point function

2월 21, 2011 댓글 남기기

typedef void (*Pf)();

PF edit_ops[] = {&cup, &paste, &copy, &search};
PF file_ops[] = {&open, &append, &close, &write};

PF* button2 = edit_ops;
PF* button3 = file_ops;

button2[2]();

카테고리:c++

Financial Numerical Recipes in C++

4월 5, 2010 댓글 남기기

STL && ATL && WTL

1월 6, 2009 댓글 남기기

STL(Standarad Template Library)
Template 기법을 이용해 만들어진 표준화된 library라고 볼 수 있습니다. 자료구조론을 공부하다보면 배우게 되는 queue, list, hashmap, vector 등과 같은 container와 sort collection, generic 알고리즘과 같은 algorithim이 있고, string을 통한 문자열 접근, exception handling, auto_ptr의 스마트 포이터 등의 기능들을 표준화해 놓은 것입니다. 대부분의 C++ Compiler는 이 STL을 지원하고 있으면, 이는 linux, unix, windows, macos 등 플랫폼에 상관없이 지원되고 있습니다.
[wikipedia] Standard Template Library
[codeproject] An Introductory STL tutorial

ATL(Active Template Library)
COM(Component Obejct Model)을 C++에서 구현하는데 좀더 쉽게 하기 위해 template을 이용해서 만든 일종의 wrapper library입니다.
[wikipedia] Active Template Library
[wikipedia] Component Object Model

WTL(Windows Template Library)
GUI를 구성하기 위한 library를 template 기법을 이용하여 가볍고 쓰기 쉽게 만든 것입니다. 달리 얘기하면, WTL은 MFC(Microsoft Foundation Class Library)보다 가벼우면서 쉽게 GUI를 작성하기 위해 ATL을 이용하여 만든 library입니다. 쉽게 말해 ATL의 확장이라고 할수 있습니다.
[wikipedia] Windows Template Library
[codeproject] WTL for MFC Programmers, Part I – ATL GUI Classes
[wikipedia] Microsoft Foundation Class Library

카테고리:c++

__declspec(property)

4월 30, 2008 댓글 남기기

MSDN에는 이것에 대해 다음과 같이 설명되어 있다.

__declspec(property(get=get_func_name)) declarator
__declspec(property(put=put_func_name)) declarator
__declspec(property(get=get_func_name, put=put_func_name)) declarator

이것은 클래스 또는 구조체의 non-static인 virtual data members에 대해 적용될 수 있다. 이 attribute가 적용된 경우 컴파일러는 이 가상의 멤버변수를 멤버변수 처럼 취급하며 이 멤버변수에 대한 참조는 함수 호출로 전환된다. 이 가상의 멤버변수는 l-value 또는 r-value로 모두 사용될 수 있으며 적절한 함수의 호출은 컴파일러가 결정한다.
// 예제
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    
class CTest
{
private:
	char* m_szName;

public:
	CTest(){ m_szName = strdup("");}
	CTest(const char* szName){ m_szName = strdup(szName);}
	~CTest(){ free(m_szName); }

	__declspec(property(get=GetName, put=PutName)) char* Name;

	void PutName(const char* szName)
	{
		free(m_szName);
		m_szName = strdup(szName);
	}

	const char* GetName() const
	{
		return m_szName;
	}
};  
    
int main(void)
{
	CTest test;
    
    test.Name = "hello";    
    printf("%s\n", test.Name);
}

여기서 주의할 점은 Name에 대한 접근이 단지 함수에 대한 호출로 전환될 뿐이므로 PutName과 GetName이 private이면 에러가 난다. __declspec은 Microsoft specific한 feature 임도 기억해야 한다.

카테고리:c++
팔로우

모든 새 글을 수신함으로 전달 받으세요.