“使用”声明,范围仅在当前类上?

"Using" declaration with scope only on current class?

提问人:S.H 提问时间:12/5/2014 最后编辑:S.H 更新时间:12/5/2014 访问量:3125

问:

是否有可能有一个范围仅限于单个类的指令?using

请注意,我要“使用”的内容不包含在当前类的父类中。

为简单起见,假设以下示例:

#include<vector>

class foo
{
using std::vector; //Error, a class-qualified name is required
}

另一个有趣的事情是,如果包含指令,如果包含标头:using

MyClassFoo.h:
#include<vector>

using std::vector; //OK
class foo
{

}

而在

NewHeader.h
#include "MyClassFoo.h"
...

如何防止“”在这里可见?using std::vector

使用 using 指令 ++ C +11

评论

0赞 S.H 12/5/2014
是否有可能为“std::vector<T>”创建一个模板化类型别名,然后称为“vector”?这样,它的作用与我希望使用 std::vector 在类内执行的操作相同
0赞 Some programmer dude 12/5/2014
是的,在创建类型别名时可以对声明进行模板化,并且可以调用该类型别名,因为它位于 的另一个作用域中。usingvectorstd::vector
1赞 12/5/2014
我认为值得指出的是,这不是一个 using 指令,而是一个 using 声明。using 指令引入命名空间
0赞 S.H 12/5/2014
谢谢,我把“指令”改成了“声明”
0赞 Brent Bradburn 5/2/2015
接近您想要的使用包装器命名空间

答:

0赞 MNS 12/5/2014 #1

至于你的第一个要求,你可以使用命名空间,以便将范围限制为单个类。using namespace

#include<vector>

namespace FooClasses
{
    using namespace std; //The scope of this statement will NOT go outside this namespace.

    class foo
    {
      vector<int> vecIntVector; 
    };

}// namespace FooClasses

对于您的第二种情况,请务必明智地利用并明智地使用。#define#undef

4赞 Drax 12/5/2014 #2

由于您标记了 c++11:

#include<vector>

class foo
{
  template<typename T>
  using vector = std::vector<T>;
};

评论

3赞 WhozCraig 12/5/2014
此外,如果您有任何使用可选分配器的倾向。template<class T, class... Args> using vector = std::vector<T, Args...>;
0赞 S.H 12/5/2014
这看起来不错,但不幸的是它给了我“无法识别的模板声明/定义”?!
0赞 Drax 12/6/2014
@S.H 您需要使用 -std=c++11 和足够新的编译器进行编译
0赞 S.H 12/10/2014
由于我是使用 C++11 编译的,因此 VS2012 的问题 - >链接到支持的 VS C++11 功能
0赞 Drax 12/10/2014
@S.H 是的,它似乎是在 VS2013 中引入的:msdn.microsoft.com/en-us/library/vstudio/dn467695.aspx,悲伤 =/