2012-08-29 4 views
2

나는 C에서 데이터베이스 쿼리에서 몇 가지 유형의 검색을 지원하려는 경우에 템플릿 교체 ++ 나는 어떤이는 것을 알지C++ - 목적 C

template<typename T> 
T getDBValue(int col){ 
    throw "not implemented"; 
} 

template<> 
int getDBValue<int>(int col){ 
    return 43; 
} 

template<> 
char* getDBValue<char*>(int col){ 
    return "foo"; 
} 

같은 템플릿을 기반으로하는 방법 정의를 만들 수 있습니다 목표 - C에서 템플릿의 실제 대응, 그래서 당신은 무엇을 오히려 사전에이

- (type1) getType1FromCol: (int) col; 
- (type2) getType2FromCol: (int) col; 
- (type3) getType3FromCol: (int) col; 

같은

감사를 구현하는 것보다 몇 리턴 값을 지원하는 데 사용하는 것입니다!

답변

2

언어를 혼합하려면 항상 Objective-C++를 사용할 수 있습니다. , 또는 특정 작업에 더 적합한 것을 발견하면. 일반적으로 파일 확장명을 .mm으로 변경하면 ObjC++로 컴파일됩니다.

template<typename T> 
T getDBValue(int col); // << not defined 

template<> 
int getDBValue<int>(int col){ 
    return 43; 
} 

template<> 
const char* getDBValue<const char*>(int col){ 
    return "foo"; 
} 

당신은 이런 식으로 접근 할 수 :

@implementation MONDBEntry 
{ 
    int col; 
} 
... 

- (int)intValue 
{ 
    return getDBValue<int>(self.col); 
} 

- (NSString *)stringValue 
{ 
    return [NSString stringWithUTF8String:getDBValue<const char*>(self.col)]; 
} 
... 
ObjC 인터페이스의

, 당신은 기존의 프로그램을 사용하여이 같은 간단한 래퍼 인터페이스를 고려할 수
2

있습니다 정말 두 옵션, 사용자에 대한 더 conventient의 내용에 따라 :

  • 당신이 제안, 수행 다른 방법
  • 사용하는 형식이 무엇이든 반환 하나의 방법을 다른 이름을 부여 항목에 적합합니다 (기본적으로 모든 단일 형식 메서드를 하나로 병합하여 NSObject * 또는 id와 같은 제네릭 형식을 반환 함). 분명히 "실제"객체 반환 유형에 대해서만 작동하며 기본적으로 호출자가 올바른 결과 유형을 알거나 결과에서 쿼리 할 것을 요구합니다.