이 예제에서는 tuple
의 템플릿 매개 변수 유형을 공제 할 수 있습니까? 튜플의 템플릿 매개 변수를 중괄호 초기화에서 유추 할 수 있습니까?
#include<tuple>
#include<string>
template<class T1, class T2>
void fun(std::tuple<T1, T2> t, std::string other){}
int main(){
fun(std::tuple<double, int>(2.,3), std::string("other")); // ok
fun(std::make_tuple(2.,3), std::string("other")); // ok, but trying to avoid `make_tuple`
fun({2.,3},std::string("other")); // desired syntax but
// giving compilation error: candidate template ignored: couldn't infer template argument 'T1' void fun(std::tuple<T1, T2> t)
}
는 I 함수
fun
레벨에서 가변 인자를 포함하는 용액을 방지하기 위해 두 번째 인수
other
첨가. 또한 적어도 사용자 코드 (예 :
main()
)에서
make_tuple
의 사용을 피하려고합니다. 실제로 "원하는 구문"이 허용되는 한 관련된 유형 인
tuple
유형 일 필요는 없으며 나중에 어떻게 요소 유형을 추후 단계에서 추론 할 수 있습니다.
그것은 적어도 clang 3.2
및 gcc 4.7.2
실패
(또한 유사하지만,이는 괄호에있는 모든 가진 서로 다른 요소에서 작동하지 않기 때문에 initializer_list
함께 할 수 없다). 현재 또는 가까운 장래의 표준에서 효과가있을 것이라는 희망이 있습니까? (예를 들어, 미래() initializer_tuple
?.)
(이 하위 요소를 통합하여, 통화 기능 표현력을 추가하는 것은 매우 유용 할 수 있지만,이에 대한 주장 할 수있다)
참고 : 예를 들어, 코드는 std::forward_as_tuple
이 std::make_tuple
보다 적합하므로 인수가 반드시 복사되지는 않습니다 : http://en.cppreference.com/w/cpp/utility/tuple/forward_as_tuple. 이기종 이니셜 라이저 목록을위한 내장 언어 기능이있는 것처럼 아직 좋지 않습니다.
명백하게 절대적으로 방법이 없습니다 (sic). 'initializer_tuple' 언어 기능을 추가하는 것에 대해 의견이 있으십니까? – alfC