在两个结构(函子)中理解typedef的作用域
Understanding the scope of a typedef in two structs (functors)
如果I typedef
是结构(函子)中的某个类型,那么typedef
的作用域是该结构的本地作用域吗?
考虑下面的例子,在两个独立的函子中,我将typdef‘ed foo设为int
和double
。这个例子正确吗?
template <typename T>
struct firstfunctor
{
typedef int foo;
foo operator()(const foo& a, const foo& b)
{
return /*whatever*/
}
};
template <typename T>
struct secondfunctor
{
typedef double foo;
foo operator()(const foo& a, const foo& b)
{
return /*whatever*/
}
};
是的,typedef是有作用域的,您可以分别定义成员类型firstfunctor::foo
和secondfunctor::foo
。
是的,typedef是有作用域的。使用它们时,您必须指定范围。
这适用于对象、类和库。范围通常局限于{ }
集合内部定义的内容。
是。
这也适用于函数和命名空间。
类型将是firstfunctor<>::foo
限定的。您可以将其设为私有,尽管C++11的auto
允许您绕过这一点。
是的,您可以将这些typedef用于有趣的元编程概念,从而在类中传递给模板(在这种情况下甚至是模板),并可以使用
typename X<T>::foo
以获得您的"动态"类型。
其中X是模板化的模板参数。
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 创建从外部作用域重新声明模板参数的typedef的负面影响
- 令人困惑的typedef涉及类作用域
- 在两个结构(函子)中理解typedef的作用域
- Typedef和using声明在同一作用域的相同名称