2014-12-05 4 views
6

범위가 단일 클래스로 제한된 using 지시어를 사용할 수 있습니까?현재 클래스에만 범위가있는 "Using"선언이 있습니까?

"사용"하고 싶은 것은 현재 클래스의 부모에 포함되어 있지 않습니다.

단순화하기 위해, 다음 부여 됨으로써 가정

또 다른 흥미로운 점은 알 수 인의 using 지침이 포함 된 경우, 헤더가 포함되어있는 경우 :

MyClassFoo.h: 
#include<vector> 

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

} 

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

어떻게하면 "using std::vector"이 (가) v가되지 않도록 할 수 있습니까? 여기 있겠 니?

+0

다음 "벡터"라고합니다 "표준 : : 벡터 "에 대한 템플릿 유형 별칭을 만들 수있는 가능성이 있습니까? 그렇게하면 클래스 내부에서 std :: vector를 사용하여 원하는 것을 수행 할 수 있습니다. –

+0

네,'using' 선언은 타입 별칭을 만들 때 템플리트 될 수 있습니다. 그리고 그 타입 별칭을'vector'라고 부를 수 있습니다. 'std :: vector'와는 다른 범위에 있습니다. –

+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을 활용 않습니다.

3

당신은 태그 때문에 C++ 11 :

#include<vector> 

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

또한, 선택적 할당자를 사용할 때 * any * 경사가있는 경우'template vector = std :: vector ;을 사용하십시오. – WhozCraig

+0

이것은보기에 좋지만, 불행히도 "인식 할 수없는 템플릿 선언/정의"를 제공합니까?! –

+0

@SH -std = C++ 11로 최신 컴파일러를 사용하여 컴파일해야합니다. – Drax