gpt4 book ai didi

c++ - 别名(或类型定义)参数化类的内部类

转载 作者:行者123 更新时间:2023-11-27 23:36:41 25 4
gpt4 key购买 nike

假设我有这个(坚持使用 C++03)。

template <class T, int S>
class FiniteMap
{
public:
class Iterator {};
class Entry {};
};

class Foo {};

template <class T, int S>
class FooMap : public FiniteMap<T,S>
{
public:
void bar()
{
FooMap<T,S>::Iterator iter;
FooMap<T,S>::Entry entry;
}
};

int main()
{
return 0;
}

我要typedef FooMap<T,S>::IteratorFooMap<T,S>::Entry但如果我试试这个:

typedef FooMap<T,S>::Iterator FooIterator;

我收到“错误:‘T’未在此范围内声明”。如果我尝试在其上放置模板参数:

typedef
template <class T, int S>
FooMap<T,S>::Iterator FooIterator;

我收到“错误:在‘模板’之前需要不合格的 ID”。
我求助于使用#define:

#define FooIterator typename FooMap<T,S>::Iterator

这似乎有效(尽管它不适用于 Online C++ Compiler )。

虽然看起来有点hackish。

有什么想法吗?

最佳答案

C++11 有 `using for this :)

当我尝试使用 C++03 时,我收到错误消息“在 FiniteMap 之前需要 typename 因为它是一个依赖范围...

因此:

template <class T, int S>
class FiniteMap {
public:
class Iterator {};
class Entry {};
};

class Foo {};

template <class T, int S>
class FooMap : public FiniteMap<T, S> {
public:
typedef typename FiniteMap<T, S>::Iterator FooIterator;
typedef typename FiniteMap<T, S>::Entry FooEntry;

void bar()
{
FooIterator iter;
FooEntry entry;
}
};

int main()
{
FooMap<int, 3> test;

return 0;
}

On GodBolt

关于c++ - 别名(或类型定义)参数化类的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696951/

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