【发布时间】:2013-09-03 14:40:46
【问题描述】:
我有一个在内部使用多个 STL 列表的小类
template<class T>
class MC_base {
using OBJ_LIST = std::list<T>;
using OBJ_VAL = typename OBJ_LIST::value_type;
using OBJ_ITR = typename OBJ_LIST::iterator;
using OBJ_CITR = typename OBJ_LIST::const_iterator;
OBJ_LIST A,B,C;
...
};
使用using 语句,如果我在类定义中编写一个迭代器,它看起来又好又干净:
OBJ_ITR begin() { return A.begin(); };
OBJ_ITR end() { return A.end(); };
OBJ_CITR begin() const { return A.begin(); };
OBJ_CITR end() const { return A.end(); };
再次在类定义中编写新函数很容易,因为我可以在需要时简单地使用名称 OBJ_XXXX 名称。此外,如果我稍后决定更改容器类型(比如std::vector),我只需更改一行,只要我的新容器支持所有相同的操作,一切都应该是无缝的。
但是当我想在类定义之外定义一个新的类函数时,这是有问题的
template<class T>
OBJ_ITR MC_base<T>::foo(OBJ_ITR x) { ... }
我不确定如何“引出” using 语句,以便它们与模板一起正常工作,而不是为过于冗长的每个函数定义它们。另外,我不想用我的 using 语句污染命名空间。
有没有合适的方法使用using 和模板?
【问题讨论】: