가장 큰 차이점은이 두 가지 기능을 수행 할 수있는 작업입니다 :
는
- 템플릿 기능은 컴파일 타임에 알려진되어야 함을 의미 템플릿의 매개 변수로 두 개의 한계를 취
- 정규 함수는 두 개의 한계를 일반 매개 변수로 사용하므로 변수를 사용할 수 있습니다.
기본적으로 두 번째 기능은 수행 할 수 있습니다이
int a, b;
cout << "Please enter two limits: ";
cin >> a >> b;
string s("quick brown fox");
bool res = byLength(s, a, b);
이 템플릿 기능을 할 수 없습니다
:
int a, b;
cout << "Please enter two limits: ";
cin >> a >> b;
string s("quick brown fox");
bool res = byLength<a,b>(s); // <<== DOES NOT COMPILE.
모든 통화가 제한 매개 변수에 대한 상수 식을 사용하는 경우, 템플릿 함수는 컴파일러가 최적화를 더 잘 수행 할 수 있기 때문에 몇 가지 추가 CPU 사이클을 절약 할 수 있습니다. 이러한 추가주기가 의미있는 차이를 만들 때 상황을 상상하기는 어렵습니다.
두 번째 예제를 사용하지 않는 이유는 무엇입니까?
함수에 컴파일 타임 상수가 필요한 상황이 있습니다. 예를 들어, 당신이 원하는 경우이 매개 변수 중 하나를 기반으로 std::array<len>
, 그렇지 않은 일반 매개 변수로, 템플릿 매개 변수로 전달 될 필요가 선언 :
template<size_t sz>
void demo() {
std::array<sz> data;
...
}
일반 함수 매개 변수와 함께 작동하지 않을 것 같은 :
void demo(size_t sz) {
std::array<sz> data; // <<== DOES NOT COMPILE.
...
}
템플릿은 * 컴파일 타임 *에서 해결되며 인수는 * 런타임에 평가됩니다 *. 이것이 의미하는 바는 템플릿 인자는 컴파일러에 의해 해결 될 수 있어야한다는 것입니다. 반면에 함수 인자는 컴파일 시점에 평가할 수없는 use-input과 같은 것들이 될 수 있습니다. –
좋아, 내가 질문의 어리 석음을 이해하는 것 같습니다. 삭제할 수 있습니까? –
당신은 그것들을 diffrently : 'byLength (string)'vs'byLength (string, min, max)'라고 부릅니다. 그게 당신의 눈을 변화 시킨다면. –
rubikonx9