的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

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