的C ++ 0x具有模板的别名(有时被称为模板的typedef)。 这里 当前的C ++规范没有。

您喜欢在工作中使用什么? 容器对象还是宏? 您觉得值得吗?

===============>>#1 票数:103 已采纳

您喜欢在工作中使用什么? 容器对象还是宏? 您觉得值得吗?

规范的方法是使用像这样的元函数:

template <typename T>
struct my_string_map {
    typedef std::map<std::string, T> type;
};

// Invoke:

my_string_map<int>::type my_str_int_map;

这也是在STL使用( allocator::rebind<U>并在许多库包括升压。 我们在生物信息学图书馆中广泛使用它。

它ated肿了,但是99%的时间是最好的选择。 在这里使用宏是不值得承担许多缺点的。

(编辑:我已经修改了代码,以反映升压/ STL约定在他的评论由丹尼尔指出。)

===============>>#2 票数:10

 template <typename T> struct my_string_map : public std::map<std::string,T> { }; 

您不应该从没有虚拟析构函数的类继承。 它涉及到在派生类中没有被调用时,他们应该是,你可以用未分配的内存最终析构函数。

话虽这么说,您可以*****可能*****在上面的实例中摆脱它,因为您不会在派生类型中添加更多数据。 请注意,这不是背书。 我仍然建议您要这样做。 可以做到这一点并不意味着您应该这样做。

编辑:是的,这是对ShaChris23帖子的回复。 我可能错过了一些内容,因为它显示在他/她的信息上方而不是下方。

===============>>#3 票数:0

有时,您可以为所有必需的类型明确写出未模板化的typedef。 如果基类在多个模板args上进行模板化,并且只希望使用一种类型进行类型定义,则您可以继承一个带有typedef的专用类,该类实际上包含在继承的类名中。 这种方法不太深奥比元函数的方法。

  ask by George Godik translate from so

未解决问题?本站智能推荐:

1回复

结合模板和类型安全

假设我有几个定义如下的函数: 现在,我创建另一个定义如下的函数: (1)那会基于类型T调用适当的read<T>(T **data)实现,对吗? (2)如果我指定的类型不是上述三种类型之一,则会出现编译错误,因为未定义该函数,对吗? (3)另外,我可以打电话
3回复

类型安全的模板c ++ 11枚举类标志

我试图使用模板创建类型安全的C ++标志。 我也希望有一个标志和旗帜S(是零,一个或多个标志)区别开来。 除了EnumFlag<T> operator | (T, T)之外,下面的解决方案效果很好 EnumFlag<T> operator | (T, T)导致所
1回复

不同类类型的节点的C ++树/林结构

在实施通过通用基类进行转换而找到的解决方案时 \\\\与病毒成员。 \\\\我发现了有关通用引用的问题,因为这是我创建了一个新问题的另一个问题: https://stackoverflow.com/questions/29590429/c-is-it-possible-to-u
2回复

地图中的动态模板依赖性

我不太确定如何表达我的问题,所以我举一个例子: 以这张地图为例: 例如,它将将DatabaseEntry扩展到其IDecorator<MyClass> MyClass映射。 上述声明的问题在于,它过于明确。 我想要更多的类型安全性。 像这样: 当然,T随条
2回复

变异模板和类型安全

variadic模板printf函数有几种实现方式。 一个是这样的: 并且到处都说这个实现是类型安全的,而普通的C(具有可变参数va_arg)则不是。 这是为什么? 类型安全是什么意思,这个实现相对于C printf va_arg有什么优势?
1回复

基本类型的强类型定义(BOOST_STRONG_TYPEDEF不会削减)

我以前使用过BOOST_STRONG_TYPEDEF ,主要是通过std::string ,我得到了令人满意的结果: 先前的代码无法按预期编译: 但是,此代码可以正常编译: 这似乎一点都不强! 如果没有static_cast我将无法比较或添加两种不同类型的对象。
4回复

在C ++中定义类型安全的“字节”(如8位)类型的最现代和惯用的方法是什么?

我想在我的C ++程序中定义一个byte类型,基本上是一个unsigned char什么是最惯用的方式? 我想定义一个byte类型来抽象化不同的表示形式,并有可能创建此新byte (8位)类型的类型安全数组,该类型安全数组由一个unsigned char支持的位处理库,我正在为一个非常具体
1回复

可变参数模板无法识别constexpr函数

我正在尝试在编译时初始化一些C ++数组,但出现了奇怪的g ++错误。 这是我能够获得的最小代码段,可重现错误: 编译器在抱怨 g ++ 4.7.1和4.9.0 20130520(实验性)均会发生这种情况。 请注意,如果我在Map的定义中用int替换typename Ar::
1回复

C ++原始类型安全

是否有任何计算开销通过实现类包装器来确保C基元类型的类型安全性? 如果没有,为什么那些包装不在STL?
10回复

什么是类型安全?什么是“类型安全”替代方案? [重复]

这个问题已经在这里有了答案 : 9年前关闭。 可能重复: 什么是类型安全? 什么是类型安全? 我正在阅读有关c ++向量的信息,有人提到C printf m