泛型类的Typedef(别名) 是否可以在C++中创建模板类别名(不指定参数)?< /P>
不起作用泛型类的Typedef(别名) 是否可以在C++中创建模板类别名(不指定参数)?< /P>,c++,templates,C++,Templates,不起作用 如果没有,有什么好的理由吗?此功能将在C++0x中引入,称为模板别名。它将是这样的: template<typename Key, typename Value> using MyMap = std::map<Key, Value> 模板 使用MyMap=std::map C++03标准中不支持模板typedef。但是,有一些变通办法: template<typename T> struct MyOwnMap { typedef std::ma
如果没有,有什么好的理由吗?此功能将在C++0x中引入,称为模板别名。它将是这样的:
template<typename Key, typename Value>
using MyMap = std::map<Key, Value>
模板
使用MyMap=std::map
C++03标准中不支持模板typedef。但是,有一些变通办法:
template<typename T>
struct MyOwnMap {
typedef std::map<std::string, T> Type;
};
MyOwnMap<int>::Type map;
模板
结构MyOwnMap{
typedef std::映射类型;
};
MyOwnMap::类型映射;
在C++98和C++03中typedef
只能用于完整的类型:
typedef std::map<int,int> IntToIntMap;
它还支持模板
别名:
template <
typename Key,
typename Value,
typename Comparator = std::less<Key>,
typename Allocator = std::allocator< std::pair<Key,Value> >
>
using myOwnMap = std::map<Key,Value,Comparator,Allocator>;
模板<
typename键,
typename值,
typename Comparator=std::less,
typename分配器=std::分配器
>
使用myOwnMap=std::map;
<>这里: < p> C++下11,只有一种方式
模板
结构my_类型:real_类型{}
另一种方法:
template <
typename Key,
typename Value,
typename Comparator = std::less<Key>
>
class Map: public std::map<Key,Value, Comparator> {
};
模板<
typename键,
typename值,
typename Comparator=std::less
>
类映射:公共std::Map{
};
我认为你能做的最好的事情就是使用std::map
将map
导入本地名称空间。@叔叔:他没有说这是出于长度目的,他的示例使用了相同的击键次数。这会搞乱非平凡的类。不,有。类模板中的嵌套类型后跟typedef,就像标准库的C++98实现一样。但它违背了表达的目的是简短。这将与模板别名不兼容,更不用说糟糕的视图了。这种“黑客”是为不同平台编写交叉标准代码的唯一方法,而这些平台并不等同。这是子类化,所以不能将std::map
传递给接受map
的函数。我没有说等价的。它可以在编译器中使用,但不支持上述方法。
template <
typename Key,
typename Value,
typename Comparator = std::less<Key>,
typename Allocator = std::allocator< std::pair<Key,Value> >
>
using myOwnMap = std::map<Key,Value,Comparator,Allocator>;
template <
typename Key,
typename Value,
typename Comparator = std::less<Key>
>
class Map: public std::map<Key,Value, Comparator> {
};