일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Golang
- 영화
- Linux
- package
- Callback
- Python
- 책
- File
- GO 언어
- window
- FOR
- tcp
- c++
- JavaScript
- Close
- 리뷰
- mutex
- http
- C
- go언어
- install
- go
- windows
- API
- range
- write
- Sync
- bitcoin
- channel
- json
- Today
- Total
목록c++ (10)
Code Habit
Nats는 오픈소스 메시징 시스템을 지원하는 서비스의 한 종류로 다양한 응용프로그램 간의 효율적인 통신을 지원한다. 기본적으로 publisher와 subscriber로 구성되어 있으며 다양한 프로그래밍 언어에 대한 클라이언트 라이브러리를 제공하므로 다양한 언어로 작성된 애플리케이션 간의 통신을 할 수 있다. c++로 작성된 client 예제이다. #include #include void messageHandler(natsConnection* conn, natsSubscription* sub, natsMsg* msg, void* closure) { // get data const char* data = natsMsg_GetData(msg); int dataLen = natsMsg_GetDataLength(..
c++ 11 이상부터는 std::function, std::bind 사용하여 callback 함수를 묶어 호출하는 패턴을 사용할 수 있다. class CallbackClass { public: void Callbackfunction(int x) { std::cout
Modern C++은 C++ 11 이 후의 버전을 가리키며 더 효율적으로 코드를 작성하고 안정성 및 최적화를 위해 등장했다. 1. auto 키워드 - auto 키워드를 이용하여 변수형을 자동으로 추론할 수 있다. auto n = 10; // int형으로 추론 auto str = "coding"; // char* 형식으로 추론 2. 범위 기반 루프 ( for 문 ) - 범위 기반 루프를 사용하여 컨테이너의 모든 요소를 간편하게 순회할 수 있다. std::map data; data[0] = "first"; data[1] = "second"; data[2] = "third"; for (auto& fit : data) { auto& idx = fit.first; auto& value = fit.second; /..
최근 직무가 Client 개발에서 Server로 변경 되었다. Codec 관련 업무를 맏고 있는데 Metadata나 헤더 파싱하는데 bit 단위로 접근해야 하는 경우가 많더라.. 하여 간단하게 Bit값 읽어오는 함수 두개를 만들어 보았다. - 1Byte의 데이터를 입력 받아 index 번째 있는 bit 값을 가져오는 함수이다 ( 0 or 1 ) UINT8 GetBit(UINT8 nData, UINT nIndex) { if (8 8) { return 0; } int nOut = 0; for (int i = nIndex; i < nEnd; i++) { nOut = (nOut
has-a 모델의 두개의 클래스 간 정보를 주고 받기 위해서는 callback을 활용할 수 있다. 예를들어 class A가 class B를 갖고 있다고 하자. A클래스 객채에서는 B클래스에 있는 변수나 함수를 사용하기 용이하지만 B클래스 객체에서는 A클래스에 접근하기 힘들다. 이럴때 callback을 이용하여 B클래스에서 A클래스에 있는 변수나 함수에 접근할 수 있다. ( 보통 B클래스 작업을 마무리 하고 A클래스에 통보할 일이 필요할 때 이를 활용하게 된다.) ex) class Callback { public: // 구현은 이를 상속하는 클래스에서 하기 때문에 // virtual 즉, 가상의 함수로 선언한다. virtual void done() = 0; }; class B { public: // cal..
개발을 하다보면 부하가 걸리는 부분의 로직별 수행시간을 측정할 필요가 있다. 다음 소스를 사용하면 ms(마이크로세컨드) 단위로 수행속도를 측정할 수 있다. #include #include int main(void) { clock_t start, end; start = clock(); // 수행할 로직 end = clock(); printf("%f\n", ((double)(end-start)) / CLOCKS_PER_SEC); } CLOCKS_PER_SEC은 ms(마이크로세컨드)를 s(초)단위로 변경할 때 쓰이는 매크로 상수이다.
* 유니코드 -> 멀티바이트 wchar_t strUni[256] = L"유니코드"; char strUtf8[256] = { 0, }; int nLen = WideCharToMultiByte(CP_UTF8, 0, strUni, lstrlenW(strUni), NULL, 0, NULL, NULL); WideCharToMultiByte(CP_UTF8, 0, strUni, lstrlenW(strUni), strUtf8, nLen, NULL, NULL); * 멀티바이트 -> 유니코드 wchar_t strUnicode[256] = { 0, }; char strMultibyte[256] = { 0, }; wcscpy_s(strUnicode, 256, L"유니코드"); int len = WideCharToMultiBy..
c++ 문자열에서 특정 문자열을 찾을 때 std::string의 find 함수를 사용한다. 보통 아래와 같이 많이 사용한다. std::string text = "abcdefg"; size_t nPos = text.find("cde"); 위 코드에서 nPos의 값은 찾고자 하는 문자열의 시작 위치가 된다. 즉 text.find("cde")는 2를 반환하게 된다. 이렇게 쉽고 편리하게 원하는 문자열을 찾을 수 있는데 하나 주의할 점이 있다. 찾고자 하는 문자열이 없을 때다 보통 찾고자 하는 문자열이 없을때 -1이 반환된다고 생각하는데 여기서는 그렇지 않다. -1이 아닌 매우 큰 수의 쓰레기 값이 반환된다. 그래서 만약 다음과 같이 쓰면 런타임 에러를 발생할 수 있다. std::string text = "ab..