[c++] 템플릿 기본 인수

다음을 수행 할 수있는 경우 :

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템플릿 논쟁이 되십시오. 각도 괄호는 필요하며 생략 할 수 없습니다.


답변