在两个结构(函子)中理解typedef的作用域

Understanding the scope of a typedef in two structs (functors)

本文关键字:typedef 作用域 结构 两个 函子      更新时间:2023-10-16

如果I typedef是结构(函子)中的某个类型,那么typedef的作用域是该结构的本地作用域吗?

考虑下面的例子,在两个独立的函子中,我将typdef‘ed foo设为intdouble。这个例子正确吗?

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::foosecondfunctor::foo

是的,typedef是有作用域的。使用它们时,您必须指定范围。

这适用于对象、类和库。范围通常局限于{ }集合内部定义的内容。

是。

这也适用于函数和命名空间。


类型将是firstfunctor<>::foo限定的。您可以将其设为私有,尽管C++11的auto允许您绕过这一点。

是的,您可以将这些typedef用于有趣的元编程概念,从而在类中传递给模板(在这种情况下甚至是模板),并可以使用

typename X<T>::foo

以获得您的"动态"类型。

其中X是模板化的模板参数。