2012-04-28 3 views
2

я хотел создать шаблонный класс с статической функциейшаблон класса со статической функцией

template <typename T> 
class Memory 
{ 
public: 
    template < typename T> 
    static <T>* alloc(int dim) 
    { 
    T *tmp = new T [ dim ]; 
    return tmp; 
    }; 
} 

, но я всегда получите

int *a = Memory::alloc<int>(5) 

я не знаю, что шанс ..

»template<class T> class Memory« used without template parameters 
expected primary-expression before »int« 
Fehler: expected »,« or »;« before »int« 
+0

i dont компиляция, последний код - проблема :) – Roby

+0

@Tudor: Учитывая, что OP отправил сообщение об ошибке компилятора, по-видимому, нет! –

ответ

6

Вы разрабатываете шаблон как для класса, так и для функции, когда вы, вероятно, хотите только шаблон одного из них.

Это вы имеете в виду?

template <typename T> 
class Memory 
{ 
public: 
    static T* alloc(int dim) 
    { 
    T *tmp = new T [ dim ]; 
    return tmp; 
    }; 
} 

int *a = Memory<int>::alloc(5); 

Вот правильный вариант с обоими:

template <typename T> 
class Memory 
{ 
public: 
    template <typename U> 
    static U* alloc(int dim) 
    { 
    U *tmp = new U [ dim ]; 
    return tmp; 
    }; 
} 

int *a = Memory<float>::alloc<int>(5); 

Вы можете удалить внешний шаблон, если вы просто хотите, чтобы функция будет шаблонный.

+0

ahh oki, так можно сделать функционал с шаблоном static T * alloc ...? – Roby

+0

@Roby Я не совсем понимаю, что вы имеете в виду, но я обновил сообщение другим примером. – Pubby

+0

работает спасибо! :) – Roby