저는이 문제에 대한 답변을 찾기 위해 Google에서 주위를 둘러 보았습니다. 그러나이 행동에 대해 이야기하는 사람을 찾을 수 없어 정확한 용어로 검색하지 않아야합니다. 나는 템플릿 함수의 부분적인 스펙이 C++ 표준의 일부인지 또는 컴파일러가 특정적인 것인지 여부를 알아 내려고하고있다.C++의 부분 템플릿 함수 사양이 작동하지만 그 이유는 무엇입니까?
부분 지정으로 컴파일러에서 추론 할 수없는 형식 만 지정하면됩니다.
#include <iostream>
#include <tuple>
#include <string>
template<class A, class B, class C>
std::tuple<A, B> test(C c)
{
// do something based on c, return tuple with types A and B
return std::make_tuple(A(), B());
}
int main(void)
{
// I expected I would have to use this form. Specify all parameters.
std::tuple<int, int> value3 = test<int, int, int>(5);
// Here, I only specified the return value types, did not specify the parameter type, yet it compiles.
auto value1 = test<int, int>("c-string");
// Similar example here. Return types specified, parameter type deduced. Compiles fine.
auto value2 = test<std::string, int>(42);
return 0;
}
: 나는 템플릿 기능 3 가지를 소요되며, 하나는 매개 변수에 사용되며 추론 할 수있다 'F'를해야한다면, 나는 형태 여기
f<type, type>(parameter)
와 'F'를 부를 수있는 것은 예입니다
g ++ 4.5.3, g ++ 4.6.3, VS2010 및 VS2012로 테스트했습니다. 컴파일러가 널리 지원하는 것 같기 때문에 표준의 일부가 될 것이라고 확신하지만 누구나 확인할 수 있습니까? 누구든지이 링크가 작동하는 이유를 설명하는 리소스에 대한 링크 또는 포인터가 있습니까?
는 감사
왜 이것이 작동하지 않아야한다고 생각하는지 설명하지 않았습니다. 여기에 어떤 질문도 없습니다. 어쨌든, 당신은 인수 공제에 대해 말하고 있습니다. 이것은 확실히 새로운 것이 아닙니다. –
당신이 찾고있는 것 같아요 : http://cpp0x.centaur.ath.cx/temp.deduct.call.html – yonilevy
그래, 그건 정확히 yonilevy. 감사. –