如果我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*/
}
};
答案 0 :(得分:5)
是的,typedef是作用域的,你分别定义成员类型firstfunctor::foo
和secondfunctor::foo
。
答案 1 :(得分:1)
是的,typedef是作用域的。使用它们时必须指定范围。
这适用于对象,类和库。范围通常仅限于{ }
。
答案 2 :(得分:0)
是
这也适用于函数和命名空间。
该类型将firstfunctor<>::foo
限定。你可以把它变成私有的,虽然C ++ 11的auto
允许你解决这个问题。
答案 3 :(得分:0)
是的,您可以将这些typedef用于有趣的元编程概念,从而将类传递给模板(在本例中甚至是模板)并可以使用
typename X<T>::foo
让你的动态&#34;类型。
其中X是模板化模板参数。