2016-01-30 9 views
7

Mam funkcji szablonu:Jak używać C++ 11 Używanie słowa kluczowego dla funkcji szablonu do usuwania nazw w zakresie

namespace Example 
{ 
template<class T> 
T Foo() { return T(0); }; 
} 

chciałbym użyć instrukcji using lub podobnego tak, że nie mam do prefiksu nazwa funkcji z jej przestrzenią nazw podczas jej wywoływania, tj.

template<class T> using Foo = Example::Foo<T>; 

To jednak nie działa.

I nie chcesz używać następujące podejście jak byłoby to wszystko tworzą przestrzeń nazw Example:

using namespace Example; 

jest tam ładny C++ 11 sposób stworzyć skróconą alias do funkcji w przestrzeń nazw?

+0

Słowo kluczowe 'auto', a nie' using', ale jest to szablon zmiennej C++ 14. –

+0

Nie, to by zrobiło coś innego, stworzyłoby zmienną, która trzymałaby wskaźnik na Foo (faktycznie tyle zmiennych, ile jest instancji wynikowej wartości). Opcja 'auto' byłoby równoważne' szablonu T (* Foo)() = Przykład :: Foo < T >; ' –

Odpowiedz

4

Jak w przypadku każdego symbolu, można wykonać using Example::Foo;. Może to być użyte w zakresie przestrzeni nazw lub w zakresie funkcji (jest to faktycznie obecne w C++ 98, nie jest nowe w C++ 11). Podejście, które próbujesz wykonać, działa tylko dla typów, podczas gdy Foo jest funkcją.

+0

To nie działa na poziomie klasy: ' klasa { \t wykorzystaniem Przykład: Foo; }; ' Podczas gdy przykład podałem' szablon przy użyciu Foo = Example :: Foo ; 'działałoby dla klas szablonów na poziomie klasy. – keith

+2

Nie, nie ma, jeśli chcesz to zrobić dla funkcji na poziomie klasy, musisz zdefiniować funkcję opakowania: 'szablon static T Foo() {return Example :: Foo(); } '. Nie jest jasne, jakie powinno być użycie w zakresie klasy, czy funkcja importowania ma być statyczna? Czy powinien być widoczny z zewnątrz? itp. Również z tego samego powodu sugeruję, aby nie używać owijaczy, jak sugerowałem dla wygody, powinien to być dobry powód. –

Powiązane problemy