2011-08-07 46 views
7

Liệu C++ 0x có (hoặc là C++ 0x tại một thời điểm nào đó sẽ có) trích dẫn đối số mẫu cho các hàm tạo không? Trong An Overview of the Coming C++ (C++0x) Standard, tôi thấy những dòng sau:khấu trừ đối số mẫu cho các hàm tạo

std::lock_guard l(m); // at 7:00 

std::thread t(f);  // at 9:00 

Điều này có nghĩa rằng uỷ thác make_foo chức năng mẫu là cuối cùng không cần thiết?

+1

Ồ, chờ đã, tôi nghĩ mình đã nhầm lẫn các nhà xây dựng các mẫu lớp với các khuôn mẫu của các lớp xây dựng ... vẫn là một câu hỏi thú vị, là các câu lệnh methinks. – fredoverflow

Trả lời

14

Trích đối số mẫu hoạt động cho bất kỳ hàm nào, kể cả hàm tạo. Nhưng bạn không thể suy ra các tham số mẫu lớp từ các đối số được truyền cho hàm tạo. Và không, bạn không thể làm điều đó trong C++ 0x.

struct X 
{ 
    template <class T> X(T x) {} 
}; 

template <class T> 
struct Y 
{ 
    Y(T y) {} 
}; 

int main() 
{ 
    X x(3); //T is deduced to be int. OK in C++03 and C++0x; 
    Y y(3); //compiler error: missing template argument list. Error in 03 and 0x 
} 

lock_guardthread không phải là mẫu lớp. Mặc dù vậy, chúng có các mẫu hàm tạo.

+0

Bài đăng của bạn là vào năm 2011, nhưng để cập nhật một chút, C++ 1y sẽ sớm có: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3836.html xem trên giấy N3602 trên trang (http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3602.html). – daminetreg

Các vấn đề liên quan