2015-01-09 2 views
1

템플릿을 사용할 필요없이 (간단히) C++ 템플릿 동작을 수행 할 수 있습니까? 그 기능이없는 임베디드 C++ 툴체인을 사용하고 있지만 복제가 가능하다면 확실히 유용 할 것입니다.템플릿을 사용하지 않고 C++ 템플릿 동작 달성

사용 예제로서, 여러 유형의 순환 버퍼를 만들고 싶습니다. 현재로서는 uint8_t 원형 버퍼 만 있지만 더 필요합니다.

+4

템플릿이없는, 그래서 전체 프로그래밍 언어입니다. 그러나 매크로, 코드 생성 스크립트 또는'constexpr'을 사용하여 일부 기능을 복제 할 수는 있습니다. 그러나 임베디드 툴체인이 후자를 지원하는지는 의심 스럽지만 말입니다. – juanchopanza

+3

당신이 얻을 수있는 가장 가까운 것은 일부 전처리 기 매크로 속임수 IMHO이지만 호환 가능한 구문은 없습니다. 또 다른 옵션은 C++ 프론트 엔드를 사용하여 c 중개 코드를 생성하는 것입니다. –

+0

흠, 아니요, 후자의 기능이 없습니다. –

답변

3

당신은 매크로의 실제 정의를 포장, 각 구현을 위해 그것을 다시 작성하지 않았을 :

#define GenerateCircBufClass(T)\ 
class CircBuf_impl_##T \ 
{\ 
public: \ 
    CircBuf_impl_##T(); \ 
    ~CircBuf_impl_##T(); \ 
    // etc... 
}; 

GenerateCircBufClass(uint8_t) 
GenerateCircBufClass(float) 
// etc... 
+0

이 모든 것이 다소 흥미로운 것 같습니다. 고마워, 나는 그것을 시도 할 것이다! –

+0

전 처리기에서 구현을 완전히 정의해야하므로이 디버깅 기능을 사용할 수 없게 될 것이라고 생각합니다. –

+0

@EdKing 컴파일러는 보통 사전 처리 실행의 결과를 얻는 방법을 제공합니다 (예를 들어 gcc의'-S' 플래그 참조). 따라서 필요한 경우 실제 C++ 소스 파일을 생성 한 다음 컴파일 할 수 있습니다. – juanchopanza

관련 문제