개체의 멤버가 입력과 같은지 확인하기 위해 비교자를 작성했습니다. 이것은 char []와 같은 멤버를 제외하고는 매력처럼 작동합니다.char 형 멤버에 대한 템플릿 서명
저는 인터넷, C++ ISO 표준을 검색해 보았지만 많이 시도했지만 이해할 수는 없습니다.
/*
* main.cpp
*
* Created on: Nov 17, 2012
* Author: martijn
*/
#include <string.h>
class Data {
public:
Data() {
strcpy(Name, "MyCharArray");
};
virtual ~Data();
char Name[12];
};
template <class ClassT, char (ClassT::*Name)[]> // What should be here?!
class Comparator {
public:
Comparator() {};
~Comparator() {};
};
int main() {
Comparator<Data, &Data::Name> comparatorArray;
return 0;
}
문제 영역은 (적어도 그게 내가 그것을 만드는 기능) 코드에 표시됩니다 :
이 단순화 된 코드입니다. 현재 코드가 올바르지 않습니다. 컴파일러는 말한다 :
오류 :에 템플릿 인수 '& 데이터 :: 이름을'변환 할 수 없습니다 '문자 (데이터 :: *) []'당신은 템플릿 매개 변수 형식으로 바인드 된 배열을 지정해야합니다
std :: string을 사용하면 생활이 단순 해 집니까? 그리고 호기심에 대한 : 당신은이 패턴을 위해 무엇을 사용합니까? – Zane
물론 std :: string은 더 간단 할 것입니다. 하지만 포트란 코드에는 많은 유산과 인터페이스가 있습니다. 많은 수의 클래스에서 가능한 모든 멤버에 대해 비교자를 필요로합니다. 그래서 저는 그것의 템플릿 버전을 원했습니다. – user1290034
이것이 유용 할 수있는 곳을 알려줍니다. 레거시 코드가없는 C++ 아키텍처에서 유용 할 것으로 기대하지는 않겠지 만 달리 말하면 신경 쓰지 않아도됩니다. – Zane