2010-07-30 4 views
3
으로 거부

가능한 중복 :
How to use local classes with templates?템플릿 인스턴스화 기능 로컬 클래스

그램 ++ 4.4 템플릿으로 기능 로컬 클래스를 복용 템플릿 함수에 대한 호출을 컴파일 거부 매개 변수. 좋아요 :

// Given this: 
template <typename C> 
int f(const C& c) { 
    return c.g(); 
} 

// This compiles fine: 
struct C1 { 
    int g() const { return 42; } 
}; 

int h1() { 
    return f(C1()); 
} 

// But this doesn't: 
int h2() { 
    struct C2 { 
     int g() const { return 42; } 
    }; 
    return f(C2()); // error: no matching function for call to "f(h2()::C2)" 
} 

// Nor does this: 
int h3() { 
    struct C3 { 
     int g() const { return 42; } 
    }; 
    return f<C3>(C3()); // same error 
} 

무엇이 있습니까? 이 작업을 어떻게 수행합니까? (실제 프 로그 램에서 "h"는 멤버 함수이고 "C"는 중첩 클래스 여야하므로 "h"가 속한 클래스의 친구가됩니다.)

답변

2

C++ 0x는 이러한 바람직하지 않은 제한 사항을 제거합니다.

지금, 당신은 C 내가 (안 h의 내부 h의 클래스의 내부) 적절한 중첩 된 클래스를 만들 수 있습니다.

+0

해결 방법을 이용해 주셔서 감사합니다. "C"는 한 곳에서만 사용되기 때문에 불행한 일입니다.하지만 적어도 그렇게해서는 안되는 것들을 공개하지 않아도됩니다. – zwol

1

템플릿 매개 변수 통근 연결되어 있어야합니다.

관련 문제