이 문서는 NEXT의 게임 클라이언트/서버 과정 학생이 정리한 것이다.
저작자 표시
신고
by 흥배 2016.05.20 08:00
이 문서는 NEXT의 게임 클라이언트/서버 과정 학생이 정리한 것이다.
저작자 표시
신고
by 흥배 2016.05.18 08:00

C++ 리플렉션 기능을 기본적으로 지원하지 않고, 아마 앞으로도 지원하지 않을 것이라 생각한다.

그러나 게임 개발 시에 필요할 때가 있다.
이런 경우 필요한 부분만큼 만들기도 하는데 이 라이브러리도 고려해보면 좋을 것 같다.

 

아래 문서는 NEXT의 게임 클라이언트/서버 과정에서 학생이 정리한 것이다.

 

 

 


저작자 표시
신고
by 흥배 2016.05.04 08:00

회사에서 빌드 머신을 만들 때 개발 중인 프로그램을 빌드를 하기 위해 하는 것에 비해 덩치가 큰 비주얼스튜디오를 설치해야 한다.

코딩을 한다면 비주얼스튜디오를 설치하는 것은 괜찮지만 그냥 문제 없는 코드를 빌드만 하는데 덩치 큰 비주얼스튜디오를 설치해야 하고, 이것 때문에 비주얼스튜디오 라이선스를 하나 소비해야 한다.

 

이런 문제를 해결하기 위해서 얼마 전에 VC 프로젝트를 빌드만 할 수 있는 툴을 MS에서 제공했다.

 

특징은 다음과 같다.

Visual C++ Compilers (targeting x86, X64 and ARM)

Visual C++ headers & libraries (CRT & STL)

Visual C++ build scripts (targeting Windows desktop)

Microsoft Build Tools 2015 (MSBuild)

Windows SDK 8.1 (optional, on by default)

Windows SDK 10 (optional, off by default)

ATL and MFC (optional, off by default)

C++ Build tools specific command prompts

 

더 자세한 설명은 VC 블로그를 보기 바란다

https://blogs.msdn.microsoft.com/vcblog/2016/03/31/announcing-the-official-release-of-the-visual-c-build-tools-2015/

 

다운로드는 http://go.microsoft.com/fwlink/?LinkId=691126

 

저작자 표시
신고
by 흥배 2016.05.02 08:00

shop.h

#include <string>
#include <vector>
#include <memory>
#include <fstream>

class Item
{
};

class Shop
{
public:
 Shop() {}
 Shop(std::string name, std::initializer_list<std::shared_ptr<Item>> items) {}
 Shop(std::string name, std::string fileName) {}
 void ReadDataFromFile() {}


 Shop(const Shop &) = default;
 Shop& operator=(const Shop&) = default;

 //Shop(Shop&& shop) = default;
 //Shop& operator=(Shop&& other) = default;
 ~Shop() {};

 void ShowItemList() {}

private:
 
 std::string m_name;
 std::vector<std::shared_ptr<Item>> m_items;
 std::string m_fileName;
 std::ifstream m_fileStream;

};

 

 

main.cpp

#include "shop.h"

int main()
{
 Shop weaponArmorShop = Shop("Weapon/Armor Shop", "equip_item.txt");
 
 //Shop temp1("Weapon/Armor Shop", "equip_item.txt");
 //Shop weaponArmorShop(temp1);
 //Shop weaponArmorShop2 = temp1;
 
 return 0;
}

 

위 코드를 실행하면 아래와 같은 에러가 나온다

 

 

왜 이런 에러가 나올까? 코드를 유심히 보고, default에 대한 정확하게 안다면 어렵지 않다.

나는 default에 대해서 자세히까지는 몰라서 잠깐이지만 당황했음 ^^;

 

 

 

 

저작자 표시
신고
by 흥배 2016.04.25 08:00

불편했던 printf를 대체할 수 있습니다.
게임 프로그래밍이나 로그 등을 남길 때 필요한 기능이죠

 

아래 문서는 NEXT의 게임 클라이언트/서버 과정에서 학생이 정리한 것이다.

 

 

 

저작자 표시
신고
by 흥배 2016.04.21 09:27

C++ 프로그래밍 할 때 enum을 자주 사용한다.

그런데 C++ enum은 다른 언어의 enum에 비해서 부족한 부분이 많다.

특히 enum으로 선언한 것을 문자열로 바로 변환할 수 없어서 보통 수작업으로 직접 선언하거나 #define 등을 통해서 유틸리티를 만든다.


Better Enum 라이브러리는 우리가 기존에 귀찮게 했던 것을 대신 해준다.

이 라이브러리를 사용하면 enum을 이전 보다 더 편하게 사용할 수 있다(사실 다른 언어는 기본 지원하는 것이지만^^;)


아래 문서는 NEXT의 게임 클라이언트/서버 과정에서 학생이 정리한 것이다.



저작자 표시
신고
by 흥배 2016.04.19 08:30

예전에는 게임 프로그램에서 사용하는 프로그램 설정 이나 게임 데이터를 ini 파일이나 혹은 xml 파일을 사용했는데 몇 년 전부터 json 데이터 포맷이 인기를 끌면서 json을 많이 사용하고 있다.

 

C++에서도 json 데이터를 다룰 수 있는 라이브러리 사용이 필수라고 생각한다.

C++ json 라이브러리 중 JsonCpp가 유명한데, 편리성에서 JSON for Modern C++ 이 더 좋고, 성능에서는 Rapid Json 이 더 좋은 것 같아서 이 2개의 라이브러리에 대해서 정리했다.

 

아래 자료는 NEXT의 게임 클라이언트/서버 과정에서 학생들이 정리한 것이다.

 

 

rapidjson.zip 

 

Rapid Json 은 중국의 텐센트에서 사용하고 있고, 아마 이 라이브러리 개발자가 텐센트에서 근무하고 있지 않을까 생각된다. https://github.com/TencentOpen/rapidjson

 

 

 

저작자 표시
신고
by 흥배 2016.04.14 09:29
C++, NeXT, vc, WTL

원칙적으로 GUI 프로그래밍은 C#을 사용하여 만드는 것이 좋다고 생각한다

그러나 상황에 따라서 C++ GUI 프로그래밍을 해야 하거나 하는 것이 더 좋을 때도 있다.

이럴 때는 WTL을 사용하는 것을 추천한다.

 

WTL과 관련된 자료는 적지만 강좌 글이나 CodeProject에 있는 사용 사례를 보면 배우기 어렵지는 않다(아 기본 전제로 Win32 API 프로그래밍을 좀 알아야 한다)

 

그리고 템플릿 프로그래밍을 어떻게 사용하는지 알고 싶을 때 WTL 코드를 보는 것도 추천한다.

 

 

 

 

 

 

 

source: https://github.com/seokmin/SoraeMi-in-WTL/

 

 

 

 

 

 

저작자 표시
신고
by 흥배 2016.04.07 08:19
C++

tcmalloc,jemalloc,nedmalloc

malloc 대체에 의한 고속화.

아래와 같이 실행함으로써 malloc이 대체되어 실행된다.

LD_PRELOAD=/usr/lib/libtcmalloc.so ./exefile

 

상황에 따라 다르겠지만 tcmalloc이 제일 좋은 듯.

 

 

google::dense_hash_map

tcmalloc에 이어 google 라이브러리가로 Hash Map을 사용할 때의 고속화이다.

아래 링크에 다양한 Hash Map을 이용했을 때의 벤치 마크 테스트 결과가 있지만 실행 시간에서 꽤 빠르다.

http://incise.org/hash-table-benchmarks.html

 

생성자 호출 후에 empty_key를 설정할 필요가 있고, 무효한 키를 만들기 어려울 때는 사용하기 어렵다다.

 

 

Boost::fast_pool_allocator

Allocator를 메모리 풀을 이용하게 해서 고속화 하는 방법이다.

std::vector<int, boost::fast_pool_allocator<int>> v;

 

 

OpenMP

 

 

SIMD

Intrinsic 명령이라는 사용 방법도 있지만 용도에 맞추어 SIMD 대응의 라이브러리를 사용하면 편리하다.

Eigen(http://eigen.tuxfamily.org/index.php?title=Main_Page ) 행렬 연산 라이브러리

Boost.SIMD(https://github.com/jfalcou/nt2/tree/master/modules/boost/simd ) SIMD 명령 추상화

Libsimdpp(https://github.com/p12tic/libsimdpp )

Vc(https://github.com/VcDevel/Vc )

 

 

 

출처: http://qiita.com/neka-nat@github/items/3cddc63123680a69dfeb

 

저작자 표시
신고
by 흥배 2016.04.05 08:00
| 1 2 3 4 5 ··· 28 |

티스토리 툴바