Theo tôi được biết, mẫu bí danh trong C++ 0x sẽ cho phép chúng ta làm như sau:Tính linh hoạt của mẫu bí danh trong C++ 0x
template <typename T>
using Dictionary = std::map< std::string, T >;
Dictionary<int> ints;
ints[ "one" ] = 1;
ints[ "two" ] = 2;
Tôi có hai câu hỏi:
Thứ nhất, sẽ chúng ta có thể làm được điều này (ràng buộc với bất kỳ loại, hoặc chỉ các mẫu):
template <typename Iter>
using ValueType = std::iterator_traits<Iter>::value_type;
thứ hai, sẽ sử dụng các bí danh đòi hỏi sử dụng các từ khóa typename
trong các mẫu, ví dụ:
template <typename Iter>
typename ValueType<Iter> sum(Iter first, Iter last) { ... }
//^required?
Hoặc là yêu cầu trong khai báo bí danh?
using ValueType = typename std::iterator_traits<Iter>::value_type;
// ^required?
Hay không?