理解两个结构(functor)中typedef的范围

时间:2012-01-12 18:42:09

标签: c++

如果我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*/
  } 
}; 

4 个答案:

答案 0 :(得分:5)

是的,typedef是作用域的,你分别定义成员类型firstfunctor::foosecondfunctor::foo

答案 1 :(得分:1)

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

这适用于对象,类和库。范围通常仅限于{ }

中定义的内容

答案 2 :(得分:0)

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


该类型将firstfunctor<>::foo限定。你可以把它变成私有的,虽然C ++ 11的auto允许你解决这个问题。

答案 3 :(得分:0)

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

typename X<T>::foo

让你的动态&#34;类型。

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