2009-05-23 1 views
2

C++에 대한 오랜 경험을 바탕으로 속도를 높이려는 시도에서 나는 분명히 옳은 일을하려고 노력했으며 가능한 한 표준만큼 사용하려고합니다.불충분하게 생각한 비표준 C++ 라이브러리의 좋은 부분은 무엇입니까?

그러나이 문제에 대한 필자는 표준적인 것에 대해서는 많은 비판을하고 비표준적인 것에 대해서는 찬사를 보냅니다. 예를 들어 MFC 라이브러리가 잘못 생각해도 (예 : 그 CString 클래스의 일부 기능을 사용하는 사람들이 충분히 유용하다고 생각하는 경우에도 (a) 표준과 (b) 그것은 (나는 비판의 부유함에서) 많은 중요한 방식으로 결함이 있다고 가정한다.

내 질문은 다음 두 가지이다 :하는 라이브러리 가난 생각이-의 그럼에도 불구하고 그들을 계속 사용이 가치가 있도록 기능, 무엇을 그 특징은, 무엇 그들에 대해 너무 좋은를 포함 무엇

A.?

B. 라이브러리와 같은 라이브러리의 사용을 단순화 및/또는 강화하는 "어댑터"라이브러리가 있습니까? 리소스를 추상화하는 멋진 인터페이스 제공, 비 STL 라이브러리 인터페이스에서 STL로 이동하는 어댑터 등

StackOverflow에 대한 상대적 초보자로서이 질문이 충분히 온 - 포인트가 너무 많아서 사과드립니다. MFC는 크로스 플랫폼이 없기 때문에

답변

2

내 개인용은 ACE입니다. 그것은 다른 방법이었습니다. 좋은 아이디어였습니다. 당시 크로스 플랫폼의 스레드 및 네트워크 개발, C++의 광범위한 개발, 라이브러리 작성자의 책 등에서 사용할 수 있었던 것은 없었습니다. 그러나 구현은 끔찍 했었습니다. 복잡하고 C++의 거의 모든 유용한 기능을 억제했다. (또는 당시에는 존재하지 않았다.) 나는이 라이브러리만으로도 C++이 어렵고 추악하다고 생각하는 사람들이 많다고 생각한다. 아주 최근에 Boost 컬렉션은 스레드, ipc 및 네트워킹을 따라 잡기 시작 했으므로 적어도 하나의 대안이 있습니다. 그러나 나는 아직도 ACE에 익숙해 져야 할 가치가 있다고 생각합니다. 너무 많은 사람들이 그것을 사용하기 시작한 이후로, 그 공간에 있다면 아이디어는 좋으며, 도서관 디자인에 대한 큰 부정적인 예가 될 수 있습니다.

+1

ACE의 "문제"는 소스 코드를 살펴보면 C++ 자체 (또는 최소한 컴파일러의 지원)가 포함 된 많은 시간과 많은 시간을 필요로하는 컴파일러를 비롯하여 많은 수의 컴파일러를 지원한다는 것입니다. 그것은 표준이 아니 었습니다 ... 그래서 ACE는 "가장 낮은 공통 분모", 모든 컴파일러에서 지원되는 C++의 최소 하위 집합, 많은 #ifdef 등을 필요로했습니다. – ChrisW

0

CString을 표준이 아닌 사전에

감사합니다, 나는 생각한다. std :: string()은 표준이지만 모든 표준을 사용한다면 MS가 MFC를 개발 한 이유는 무엇입니까?

+5

STL이 표준화되기 전에 MFC와 CString이 개발되었을 가능성이 높습니다. – bdonlan

2

IMO MFC의 가장 좋은 점은 역사적으로 STL이 출시되기 전에 사용할 수 있었으며 아무 것도없는 것보다 낫다는 것입니다.

기존 MFC 코드 기반과 호환되도록 코드를 작성하는 경우에도 MFC는 여전히 유용합니다.

MFC에는 별다른 장점이 없다는 점을 제외하면 Windows 용 C++ 클래스 라이브러리 중 가장 확실한 C++ 클래스 라이브러리 중 하나 일 것입니다.

+0

관용적 인 C++, 표준 C++ 등을 배우는 관점에서 볼 때 약간의 장점이 있습니다. 그렇다면 실용적인 (다소 추악하고 복잡한) 선택입니다. C++을 사용하여 Windows UI를 작성하려고합니다. – ChrisW

1

사람들이 오래되고 어색하고 오래된 라이브러리를 사용하는 이유 중 하나는 그들이 익숙해 져서 새롭고 반짝이는 것이 더 잘 할 수 있지만 파악하기가 어렵다는 것입니다./처음에 이해하십시오. 따라서 익숙한 상태를 유지하고 생산성을 유지하십시오.

나는 이것이 일을 끝내고 일을 "올바르게"끝내는 것 사이의 균형이라고 생각한다. 사이에 어딘가에 아마 우리 대부분이 끝날 것입니다.