提问人:S.H 提问时间:12/5/2014 最后编辑:S.H 更新时间:12/5/2014 访问量:3125
“使用”声明,范围仅在当前类上?
"Using" declaration with scope only on current class?
问:
是否有可能有一个范围仅限于单个类的指令?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
答:
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赞
Drax
12/10/2014
@S.H 是的,它似乎是在 VS2013 中引入的:msdn.microsoft.com/en-us/library/vstudio/dn467695.aspx,悲伤 =/
评论
using
vector
std::vector