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
很多:-)