2014-12-05 7 views
6

Czy istnieje możliwość zastosowania dyrektywy using, której zakres jest ograniczony do jednej klasy?Deklaracja "Używanie" z zakresem tylko dla bieżącej klasy?

Należy zauważyć, że to, co chcę "użyć" nie jest zawarte w rodzicu bieżącej klasy.

Dla uproszczenia przyjmijmy, że następujące exmple:

Inną ciekawą rzeczą jest wiedzieć, czy dyrektyw using są włączone, jeśli nagłówek jest wliczone:

MyClassFoo.h: 
#include<vector> 

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

} 

aw

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

w jaki sposób można zapobiec użyciu "using std::vector" v jest tutaj?

+0

Czy istnieje możliwość, aby utworzyć na matrycy typu alias "std :: vector ", który jest następnie nazwie "wektor"? W ten sposób zrobiłby to samo, co chciałbym użyć std :: vector wewnątrz klasy –

+0

Tak, deklaracje 'using' mogą być szablonami podczas tworzenia aliasów typu i można to nazwać alias' vector', ponieważ jest w innym zakresie od 'std :: vector'. –

+1

Myślę, że warto zauważyć, że nie jest to * stosowanie dyrektywy *, to * deklaracja użycia *. Za pomocą dyrektyw wprowadzamy ** namespaces **. –

Odpowiedz

0

Co do pierwszego wymagania, można użyć przestrzeni nazw, aby zakres using namespace był ograniczony do jednej klasy.

#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 

Dla drugiego przypadku należy skorzystać z #define i #undef mądrze.

3

Ponieważ oznaczone C++ 11:

#include<vector> 

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

Ponadto, 'szablon przy użyciu wektora = std :: wektor ;' jeśli kiedykolwiek posiadasz * dowolne * skłonności do używania opcjonalnego przydziału. – WhozCraig

+0

To wygląda, dobrze, ale niestety daje mi "nierozpoznawalną deklarację/definicję szablonu" ?! –

+0

@SH Musisz kompilować z opcją -std = C++ 11 z najnowszym kompilatorem o najnowszej wersji – Drax

Powiązane problemy