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

时间:2014-12-05 09:45:04

标签: c++ c++11 using using-directives

是否有可能有一个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"
...

我该如何预防&#34; using std::vector&#34;在这里可见?

2 个答案:

答案 0 :(得分:4)

因为您标记了c ++ 11:

#include<vector>

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

答案 1 :(得分:0)

至于您的第一个要求,您可以使用命名空间,以便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