다음을 수행 할 수있는 경우 :
template <typename T = int>
class Foo{
};
메인에서 다음을 수행 할 수없는 이유는 무엇입니까?
Foo me;
그러나 다음을 지정해야합니다.
Foo<int> me;
C ++ 11은 기본 템플릿 인수를 도입했으며 지금은 완전히 이해하기가 어렵습니다.
답변
너가해야되는:
Foo<> me;
템플릿 인수가 있어야하지만 비워 둘 수 있습니다.
foo
하나의 기본 인수가 있는 함수처럼 생각하십시오 . 표현 foo
은 그것을 부르지 않을 것이지만 foo()
의지 할 것입니다. 인수 구문은 여전히 존재해야합니다. 이것은 그것과 일치합니다.
답변
C ++ 17을 사용하면 실제로 할 수 있습니다.
이 기능을 클래스 템플릿 인수 공제 라고 하며 템플릿 형식의 변수를 선언 할 수있는 방법에 유연성을 추가 합니다 .
그래서,
template <typename T = int>
class Foo{};
int main() {
Foo f;
}
이제 합법적 인 C ++ 코드 입니다.
답변
당신은 그렇게 할 수 없지만 당신은 이것을 할 수 있습니다
typedef Foo<> Fooo;
그리고 나서
Fooo me;
답변
다음을 사용할 수 있습니다.
Foo<> me;
그리고 int
템플릿 논쟁이 되십시오. 각도 괄호는 필요하며 생략 할 수 없습니다.