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

C++ 理解两个结构(函子)中typedef的作用域,c++,C++,如果我typedef结构(functor)中的某个类型,那么typedef的作用域是否是该结构的局部作用域 考虑以下示例,其中我将foo定义为两个单独的函子中的int和double。这个例子正确吗 template <typename T> struct firstfunctor { typedef int foo; foo operator()(const foo& a, const foo& b) { return /*whate

如果我
typedef
结构(functor)中的某个类型,那么
typedef
的作用域是否是该结构的局部作用域

考虑以下示例,其中我将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 int-foo;
foo运算符()(常量foo&a、常量foo&b)
{ 
return/*随便什么*/
} 
}; 
模板
结构第二函子
{ 
typedef-double-foo;
foo运算符()(常量foo&a、常量foo&b)
{ 
return/*随便什么*/
} 
}; 

是的,typedef是有范围的,您分别定义成员类型
firstfunctor::foo
secondfunctor::foo

是的,typedef是有范围的,您分别定义成员类型
firstfunctor::foo
secondfunctor::foo

是的

这也适用于函数和名称空间


类型应该是
firstfunctor::foo
qualified。您可以将其设置为私有,尽管C++11的
auto
允许您绕过此问题。

是的

这也适用于函数和名称空间



类型应该是
firstfunctor::foo
qualified。您可以将其设置为私有,尽管C++11的
auto
允许您绕过此问题。

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


这适用于对象、类和库。作用域通常限于一组
{}

中定义的内容是的,typedef是有作用域的。使用它们时,必须指定作用域


这适用于对象、类和库。范围通常限于一组
{}
Yes中定义的内容,您可以将这些typedef用于有趣的元编程概念,通过这些概念,您可以在类中传递给模板(在本例中甚至是模板),并可以使用

typename X::foo

来获得你的“动态”类型


其中X是模板模板参数。

是的,您可以使用这些typedef来实现有趣的元编程概念,通过这些概念,您可以在类中传递给模板(在本例中甚至是模板),并可以使用

typename X::foo

来获得你的“动态”类型


其中X是模板模板参数。

@Pubby:可能吧。也许成员类型名称是一个很好的术语。。。还有一个提醒,您需要说
typename firstfunctor::foo
很多:-)@Pubby:也许吧。也许成员类型名称是一个很好的术语。。。还有一个提醒,您需要说
typename firstfunctor::foo
很多:-)