c++ - 参数化类的别名(或类型定义)内部类
问题描述
假设我有这个(卡在 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>::Iterator
,FooMap<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)。
不过,这似乎有点骇人听闻。
有任何想法吗?
解决方案
C ++ 11 有`用于这个:)
当我在 C++03 上尝试时,我收到错误“typename
之前需要,FiniteMap
因为它是一个依赖范围......
因此:
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;
}
推荐阅读
- php - 应用全局范围时,Laravel 5.7 不返回新记录
- r - R中列表中矩阵中的行绑定特定行
- java - 如何在 Android 5.0 - 6.0 中使用通知侦听器取消通知优先级高于低的通知?
- python - 在不同 Linux 版本上运行的 Python 可执行文件
- google-bigquery - 如何使用 BigQuery 中的 IN 运算符搜索多个匹配项?
- c# - 使用 C# 在 Visual Studio 中查找所有没有文档的类
- r - plot.new() 中的错误:Rmarkdown 中的数字边距太大
- sql - 如何在没有公共变量的情况下根据条件连接两个数据框?
- html - 内容单独移动 - HTML
- protractor - 在 config.js 中的 Onprepare() 中写入时,不会在每个测试用例之前调用登录,即 it()