Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c++
- Scala
- template
- Clojure
- go
- async
- traits
- web
- AES
- haskell
- design pattern
- Functional
- stringprintf
- SHA1
- ranges
- RAII
- Android
- sha256
- Reflect
- Observer
- sprintf
- SHA512
- program
- coroutines
- ChromeTab
- kotlin
- Chrono
- type_traits
- WebView
- CustomTab
Archives
- Today
- Total
프로그래밍 검색 블로그
C++ Traits 본문
스칼라의 Traits C++에서 비슷하게 구현하기
operator()로 구현한다고 했을 때
1. 클래스 기반 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | struct Traits{ inline void operator()(){} }; template<typename _Base = Traits> struct WorkingA : _Base{ void operator()(){ _Base::operator()(); printf("workingA\n"); } }; template<typename _Base = Traits> struct WorkingB : _Base{ void operator()(){ _Base::operator()(); printf("workingB\n"); } }; |
1 2 3 4 5 6 7 8 9 10 11 12 | int main(int argc, const char * argv[]){ WorkingA<> a; //단독 WorkingB<> b; //단독2 WorkingA<WorkingB<>> ab; //AB WorkingB<WorkingA<>> ba; //BA a(); b(); ab(); ba(); } | cs |
2. operator() 좀 이상한것 같기도함
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | struct Traits{ inline void operator()(){} }; struct WorkingC{ template<typename _Base = Traits> WorkingC operator()(_Base&& b = _Base()){ printf("workingC\n"); return *this; } } workingC; struct WorkingD { template<typename _Base = Traits> WorkingD operator()(_Base&& b = _Base()){ printf("workingD\n"); return *this; } }workingD; | cs |
2-1 operator() 테스트
1 2 3 4 | int main(int argc, const char * argv[]){ workingD(workingC(workingC(workingD()))); } | cs |
'C++ 유틸' 카테고리의 다른 글
함수가 끝날때 같이 해제하기 defer (0) | 2017.10.06 |
---|---|
시간 관련 API (0) | 2017.10.04 |
stringprintf string반환 sprintf 2 (0) | 2017.10.04 |
stringprintf string반환 sprintf 1 (0) | 2017.10.04 |
type_trait / is_nullptr nullptr인지 검사 (0) | 2017.10.03 |
Comments