Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
泛型类的Typedef(别名) 是否可以在C++中创建模板类别名(不指定参数)?< /P>_C++_Templates - Fatal编程技术网

泛型类的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> {

};