C++ 17에서는 instantiate objects without specifying the template types이 가능합니다. 기본적으로,이 코드는 컴파일 것 :C++에서 전달 참조를 사용할 때 템플릿 구조체에 std :: decay가 필요합니까?
std::pair p(2, 4.5); // deduces to std::pair<int, double> p(2, 4.5);
std::tuple t(4, 3, 2.5); // same as auto t = std::make_tuple(4, 3, 2.5);
을 따라서 아래의 코드 가정 :
template<typename... Ts>
struct Foo
{
Foo(Ts&&... ts) :
ts{std::forward_as_tuple(ts...)}
{}
std::tuple<Ts...> ts;
};
int main()
{
auto f = [] { return 42; };
Foo foo{f, [] { return 84; }};
}
나는이 같은 튜플 선언에 std::decay
사용해야을? 나는 푸의 생성자에서이 패턴을 볼 수 있습니다
template<typename T>
auto make_baz(T&& t) -> baz<std::decay_t<T>>;
그리고, 그것을 전달을 사용하고이 때문에
std::tuple<std::decay_t<Ts>...> ts;
내가 추론 템플릿 유형에 따라 객체를 반환하는 함수를 써서 어떻게 참조가 튜플에 값을 올바르게 전달합니다. 여기서 유형 공제가 같은 방식으로 작동하는지 확실하지 않습니다.
왜 공제 안내서를 추가하지 않으시겠습니까? – cpplearner
@cpplearner Foo의 인스턴스화를 위해 이미 유형 공제가 있습니다. 나는 공제 가이드를위한 어떤 이점도 보지 못하거나, 내가 놓친 것이 있습니까? –