거의 99% 2번으로 씁니다.
1번으로 쓰는 경우는, 템플릿 함수 만들 때 변수형만을 받아서 쓰고싶을 때 이외엔 없습니다.
일단 원형에 매개변수 이름을 써 두지 않으면 나중에 이게 무슨 인자인지 보려면 구현부로 가지 않으면 모릅니다. (인텔리센스 문제)
그것도 그렇고, 함수 선언만 미리 해두고 아직 구현을 만들지 않은 채로 꽤 오래 놔뒀었는데, 나중에 구현할려고 보니까 인자가 뭐였는지 모르겠더라 이런 난감할데가 라든가... 이유 많죠.
그래도 1번 케이스도 쓰긴 하는데요, 이런 경우입니다.
어떤 형의 데이터를 생성해주는 함수가 있다 합시다.
그럼 이 함수가, 여러가지 형의 데이터를 생성시켜 줄 수 있다고 했을 때 보통은 이렇게 합니다.
1번으로 쓰는 경우는, 템플릿 함수 만들 때 변수형만을 받아서 쓰고싶을 때 이외엔 없습니다.
일단 원형에 매개변수 이름을 써 두지 않으면 나중에 이게 무슨 인자인지 보려면 구현부로 가지 않으면 모릅니다. (인텔리센스 문제)
그것도 그렇고, 함수 선언만 미리 해두고 아직 구현을 만들지 않은 채로 꽤 오래 놔뒀었는데, 나중에 구현할려고 보니까 인자가 뭐였는지 모르겠더라 이런 난감할데가 라든가... 이유 많죠.
그래도 1번 케이스도 쓰긴 하는데요, 이런 경우입니다.
어떤 형의 데이터를 생성해주는 함수가 있다 합시다.
그럼 이 함수가, 여러가지 형의 데이터를 생성시켜 줄 수 있다고 했을 때 보통은 이렇게 합니다.
CTriangle* NewInstanceTriangle(int defaultData);
CRect* NewInstanceRect(int defaultData);
CLine* NewInstanceLine(int defaultData);
여기서 조금 더 발전하면, CTriangle, CRect, CLine 을 CShape에서 상속시킨 뒤 이렇게 씁니다.
CShape* NewInstanceShape(int shapeType, int defaultData)
그리고 위와 비슷하긴 한데, 여기서 템플릿으로 눈을 돌리면 이렇게 하곤 합니다.
template <typename T > T* NewInstance(T, int defaultData);
이렇게 하면, 첫번째 인자에 CTriangle 라고 적어주면 그대로 CTriangle* 를 리턴하는 함수로 쓸 수 있습니다.
이런 경우, 변수명을 직접 적기보다는 걍 타입만을 필요로 한 케이스라는 의미로 1번처럼 원형 변수명을 안쓰게 됩니다.