을 금지 나는 다음과 같은 한 데모 코드 :자동 형식 유추
In function ‘int main()’:
11:23: error: call of overloaded ‘func(int)’ is ambiguous
11:23: note: candidates are:
2:3: note: T func(const U&) [with int i = 1, T = int, U = int]
5:3: note: T func(const T&) [with int i = 1, T = int]
: 그것은 쓸모없는 듯 보이지만 문제를 보여주기 위해 충분합니다, 그래서 내 진짜 코드로 요약 버전입니다
template <int i, typename T, typename U>
T func(const U &t){return i * t;}
template <int i, typename T>
T func(const T &t){return 2 * i * t;}
int main()
{
return func<1, int>(1);
}
따라서 자동 유형 유추 (템플릿 매개 변수 U의 경우)가 템플릿 함수의 올바른 버전을 선택하는 것에 대한 내 관심사를 방해합니다 (이는 매개 변수가 2 개 뿐인 매개 변수입니다).
기본 템플릿과 특수 템플릿을 사용하려면 두 버전이 필요합니다.
그래서 질문입니다 :이 시점에서 형식을 자동으로 추론하지 않도록 컴파일러에 지시 할 가능성이 있습니까 (예 : 어쨌든 2 개의 매개 변수 만있는 템플릿 사용).
뚜렷한 외에도 의미가 있습니까? (함수 템플리트에 다른 이름을 부여하는 것입니다 - 컴파일러에게 어떤 것을 사용할 지 지시하기 위해 무언가를해야하는 경우 동일한 이름을 갖는 점은 무엇입니까?) – Mat
글쎄 이것은 마지막 선택이 될 것이지만 나는 같은 이름을 공유하는 기능. – Nobody
또한 이름을 변경하여 재 설계를 제안합니다. 나에게 이것은 매우 나쁜 코드 냄새처럼 보인다. 사람들은 이미 오버로드 된 세트의 기능이 사용되는지에 대한 질문에 쉽게 혼란스러워합니다. 이와 같은 것이 존재한다면 그것은 더 어려워지며 나중에 유지 보수가 불가능한 코드로 이어질 수도 있습니다. – LiKao