프로그래밍/c++
-
std::variant는 참 빠르다프로그래밍/c++ 2018. 4. 18. 00:35
빠를 수 밖에 없다. 요소의 인덱스를 메타프로그래밍을 이용해 컴파일 타임에 계산하니까.그리고 get은엑세스할 요소의 위치를 재귀적으로 찾는다. constexpr이니 마찬가지로 컴파일 타임. ++ 근데 get이 constexpr 함수인데 constexpr if도 아닌 일반 if가 있을 수 있나? constexpr은 모두 컴파일 타임에 결정되어야 한다고 알고 있다. 내가 잘못 알고 있는 것일 수도 있을 거 같은데, constexpr 함수 동작에 대해선 좀 더 알아봐야겠다.
-
const std::string& 대신 std::string_view프로그래밍/c++ 2018. 2. 20. 17:01
c++17에 추가된 std::string_view는 문자열을 소유하지 않고 참조만 한다.다음과 같은 선언을 가진 함수가 있다.void print(const std::string& str) print 함수의 호출을 다음과 같이 했다고 하자. print("hello world!"); 호출될 때, 내부적으로 std::string 클래스가 만들어지고, 내부적으로 할당된 메모리 배열에 hello world!를 의미하는 값들이 채울 것이다.1~2바이트의 텍스트만 담는데도 메모리 할당을 해버리면 매우 비효율적일 것이다. 컴파일러 중에선 얼마 안 되는 메모리의 경우는 스택의 메모리를 쓰고, 그 이상을 쓰려는 경우 그때서야 메모리 할당을 하는 기법을 쓰기도 한다.(비쥬얼 스튜디오의 경우 길이 15로 기억)위와 같은 상황..
-
bool은 왜 1비트가 아닌 1바이트인가프로그래밍/c++ 2018. 2. 9. 16:13
Because every C++ data Because every C++ data type must be addressable.https://stackoverflow.com/questions/2064550/c-why-bool-is-8-bits-long가장 심플하고 좋은 대답인 듯 ~~?? 하지만 bool 벡터(std::vector)의 경우는 비트로 특수화 되어있다.http://en.cppreference.com/w/cpp/container/vector_bool
-
c++에서 리플렉션 흉내내기프로그래밍/c++ 2018. 1. 3. 01:11
원시 타입을 구분할 enum을 만든다.enum class PrimitiveType{ Char = 1, String, Int16, Int32, Int64, Real32, Real64,}; 멤버 변수 하나를 표현하는 클래스를 만든다.class MemberVariable{public: MemberVariable(const char* name, PrimitiveType type, std::uint16_t offset) : name(name), type(type), offset(offset) { } const char* GetName() const { return name.c_str(); } PrimitiveType GetType() const { return type; } unsigned int GetOffse..
-
asio 기반으로 라이브러리 프로토타입을 만들었다.프로그래밍/c++ 2017. 12. 24. 15:10
실시간 게임에 필요한 기법들을 익혀보고자 개인 프로젝트를 진행하고 있는데, 거기서 쓸 용도의 서버 기반이 될 간단한 라이브러리의 프로토타입이 만들어졌다. 목적은 딱 tcp 기반의 i/o만 담당하는 서버.차기 c++ 표준 네트워크 라이브러리가 된다는 boost/asio를 사용했다.구동은 c++ 라이브러리와 새로운 구문 몇 개 써보고 싶은 게 있어서 visual studio 2017에서 테스트하며 제작했다.#include #include "Session.h" using namespace std; int main(){ nta::tcp::server_builder builder; builder .endpoint("localhost:16333") .max_sessions(2) .session([](nta::tcp..
-
구글 플랫버퍼(flatbuffers) 맛보기 in c++프로그래밍/c++ 2017. 11. 30. 12:43
플랫버퍼란?구글의 크로스 플랫폼 직렬화 라이브러리이다. 빠르고 사용하기 편리하다.c, c++, c#, go, java, js, php, python 언어를 지원한다. 간단한 사용법 스키마 파일을 작성한다. 스키마 파일을 컴파일한다. 컴파일하면 각 언어에서 사용될 파일들이 생성된다. FlatBufferBuilder를 이용해 플랫한 바이너리 버퍼를 생성한다. 컴파일된 파일들을 포함하면 손쉽게 바이너리 버퍼를 만들 수 있다. 바이너리 버퍼를 저장하거나, 보내거나 한다. 시작하기 https://github.com/google/flatbuffers/releases 에서 최신 릴리즈를 받는다.(2017-11-30 기준, 1.8.0) flatc_windows_exe, Source Code 모두 받고 압축을 풀어둔다...
-
c++로 텍스트 파일 쓸 때 참고프로그래밍/c++ 2017. 6. 15. 01:46
utf8 파일을 읽고 utf16으로 변환하는 예제std::codecvt http://en.cppreference.com/w/cpp/locale/codecvtcodecvt_utf8, codecvt_utf16, codecvt_utf8_utf16 전부 c++ 17부터 deprecated 되었다네?ㅋㅋ 꼬시다 이렇게 하면 윈도우에서 c++ wofstream과 wide character를 써서 Unicode LE 로 저장할 수 있다.(단, bom이 없음) using namespace std; wofstream ofs("Hello.txt", std::ios::binary); ofs.imbue(std::locale(ofs.getloc(), new std::codecvt_utf16)); ofs The basic alg..