gpt4 book ai didi

c++ - 参数化 typedef 可能吗?

转载 作者:太空狗 更新时间:2023-10-29 23:36:24 25 4
gpt4 key购买 nike

我想知道是否可以使用某种参数化的 typedef。

为了说明,在我的代码中我使用了这个 typedef:

typedef std::queue<std::vector<unsigned char>, std::deque<std::vector<unsigned char> > > UnsignedCharQueue;

如您所见,这是一个相当笨拙的结构,因此 typedef 很有意义。但是,如果我想要具有其他数据类型的队列,我需要事先明确地定义它们。

所以我在想是否可以使用这样的结构:

typedef std::queue<std::vector<T>, std::deque<std::vector<T> > > Queue<T>;

private:
Queue<unsigned char> mMyQueue;

类似于 Java 中的泛型。

最佳答案

在C++11中,可以使用模板别名,例如:

template<typename T>
using my_alias = some_class_template<T>;

// ...
my_alias<T> obj; // Same as "some_class_template<T> obj;"

所以在你的情况下会是:

template<typename T>
using Queue = std::queue<std::vector<T>, std::deque<std::vector<T> > >;

另请注意,在 C++11 中,您不需要在尖括号之间留一个空格,因此上面的代码可以改写如下:

template<typename T>
using Queue = std::queue<std::vector<T>, std::deque<std::vector<T>>>;
// ^^^

在 C++03 中,您可以这样定义 Queue 元函数:

template<typename T>
struct Queue
{
typedef std::queue<std::vector<T>, std::deque<std::vector<T> > > type;
};

然后您将以这种方式使用:

Queue<int>::type obj;

如果您在带有参数 T 的模板中使用它(如下所示),请不要忘记 typename 消歧符:

template<typename T>
struct X
{
typename Queue<T>::type obj;
// ^^^^^^^^
}

关于c++ - 参数化 typedef 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306760/

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