template <typename T>
class A
{
public:
T t;
void Do (void)
{
t.doSomething();
}
};
위의 경우 템플릿 인스턴스화시 't'생성자에 매개 변수를 어떻게 제공합니까?인스턴스화시 템플릿 유형의 ctor 인수
같이, I가 있었다면 :
class P1
{
public:
P1 (int i, int a) {}
};
class P2
{
public:
P2 (int a) {}
};
I는 (A)에 템플릿 파라미터로서 모두 P1 및 P2를 사용하고자 .. 현재 난의 ctor에로 P1/P2의 인스턴스를 공급하고있어, 여기서 't'는 copy-ctor를 사용하여 초기화됩니다. (UncleBens를 들어, G 맨)
더 큰 그림 :
나는 거기에 악마의 많은 데이터 구조 (DS)의 전체 많다. 이 DS 각각은 ui에 표시된 데이터베이스에 저장되고 RPC를 통해 처리됩니다. 이 DS 각각에 대해 유효성을 검사 할 클래스가 있습니다. 유효성 검사 클래스는 유효성 검사를 수행하는 상황에 따라 다르게 동작해야합니다. DB에서 가져온 데이터의 검증에 실패하면 '개발자가 이해할 수있는'오류가 기록되고 어설 션으로 사망해야합니다. rpc-client에서 얻은 데이터 검증에 실패하면 서버가 적절한 오류에 응답해야합니다. rpc 서버에서 얻은 데이터 검증에 실패하면 로그에 기록해야하며 클라이언트가 중단되어야합니다. UI에서 유효성 검사가 실패하면 사용자에게 알림을 보내야합니다.
나는 컴파일 타임에 템플릿 매개 변수로 선택할 수있는 정책을 '오류 처리'로 만들기로 결정했습니다. 그러나 이러한 오류 처리 메커니즘에는 각각 다른 방법이 필요합니다. 그리고, 내가 붙어있는 곳.
현재로서는 복제 형식을 기반으로하는 메커니즘이 있는데, 유형을 두 번 언급하고 있습니다 (템플릿에 대한 매개 변수로 한 번, 인스턴스화의 ctor에 대한 다시 한 번). 중복됩니다.
나는 다른 사람들이 어떻게 그런 경우를 해결할 것인지 알고 싶다. 편집 질문에 대한 응답으로
: 당신의 유형은 항상없는 경우
int
, 당신이 길을 갈 수 있습니다. 나는 나의 대답을 업데이트했다. –
@Joe 현재 진행중인 방식에 어떤 문제가 있습니까? –
@ neil : 템플릿 인스턴스화가 약간보기 흉하게 보입니다. like ... A x (P2 (1)); –