c++ - 通过对象访问类子类型
问题描述
class Foo{
public:
struct Bar{};
};
...
Foo foo;
foo.Bar bar; //error
我的编译器说无效使用struct Foo::Bar
. 当然,如果我愿意,我可以在这里命名子类Foo::Bar
,但如果foo
有一个很长的嵌套模板类型和/或使用 auto 创建,那么通过这样的对象访问子类型会很方便。
*编辑:要清楚,我想创建一个 Foo::Bar 类型的对象,而不必编写Foo::
.
解决方案
遵循类似的先前响应,使用decltype 说明符:
class Foo{
public:
struct Bar{};
};
int main() {
Foo foo;
decltype(foo)::Bar bar;
const Foor foofoo;
decltype(foofoo)::Bar barbar;
}
编辑:包括引用或指针的解决方案
#include <type_traits>
...
void fref(const Foo &foo) {
typename std::remove_reference<decltype(foo)>::type::Bar bar;
}
void fpointer(Foo *foo) {
typename std::remove_reference<decltype(*foo)>::type::Bar bar;
}
推荐阅读
- google-cloud-dataflow - 使用 Apache Beam 在谷歌云数据流中实现两个数据集的连接时出现问题
- python - 从文本输入创建列表列表
- java - Android后台服务定时器无法正常工作
- angular - 与 Angular 一起使用时,折线图(FusionCharts)不显示任何数据
- angular - 使用没有 MatDialog、MatDialogRef 的组件
- r - 尝试将文本标签添加到带有 geom_text 的点时,如何处理“FUN 中的错误(X[[i]],...”?
- amcharts - amcharts4 矩形 html 标签尺寸是如何生成的?
- typescript - 如何将相同的数据多次存储在数组中?
- c# - 为什么 .Include() 上没有加载相关实体?
- python - 有没有办法在 Python 中逐行编写 hdf5 文件?