gpt4 book ai didi

c++ - 在 C++ 模板中使用 'using' 的正确做法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:41 25 4
gpt4 key购买 nike

我有一个内部使用多个 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 names。此外,如果我决定稍后更改容器类型(比如 std::vector),我只需更改一行,只要我的新容器支持所有相同的操作应该是无缝的。

但是当我想在类定义之外定义一个新的类函数时,这是有问题的

template<class T>
OBJ_ITR MC_base<T>::foo(OBJ_ITR x) { ... }

我不确定如何“带出”using 语句,以便它们与模板一起正确工作,而不是为每个函数 定义它们,这会过于冗长。另外,我不想用我的 using 语句污染命名空间。

是否有正确的方法来使用 using 模板?

最佳答案

您可以使用尾随返回类型。与参数类型一样,在类的范围内查找类型,因此嵌套类型不需要限定。

template<class T>
auto MC_base<T>::foo(OBJ_ITR x) -> OBJ_ITR { ... }

关于c++ - 在 C++ 模板中使用 'using' 的正确做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com