#include <iostream>
#include <ostream>
template<typename T>
void Func(const T& val)
{
std::cout << "const T& val\n";
}
void Func(const char* p)
{
std::cout << "const char * p\n";
}
void Func(std::ostream & (*manip)(std::ostream &))
{
std::cout << "ostream\n";
}
int main()
{
Func(std::endl);
Func("aaa");
}
관측 :템플릿 기능이 매개 변수를 선택하는 방법은 무엇입니까?
1>void Func(std::ostream & (*manip)(std::ostream &))
하지 않고는, 라인 Func(endl);
컴파일러 오류가 발생합니다. 나는이 문제가 템플릿 함수 void Fun(const T& val)
의 경우에만 T
유형을 취할 수 있지만 함수 포인터 때문일 수 있다고 가정합니다.
2>void Func(const char* p)
이 없으면 Func("aaa");
행이 정상적으로 실행됩니다. 나는 그 이유가 T
타입이 const char*
일 수 있다고 생각합니다.
질문> 올바른 주장입니까?
는
정말 재미라는 첫 번째 함수가 아니라 Func을을, 또는 오타이다? – happydave
@happydave, 코드 및 질문을 수정했습니다. – q0987
'const char *'오버로드가없는 두 번째 경우에서'T'는'char [4]'로 추론됩니다. –