2010-11-06 39 views
0
template <class T> 
void foo(T arg) { 
    T var = arg; 
} 

這可能嗎?我有類似的情況,我不能得到這樣的工作。用模板定義類型聲明變量

謝謝。

+1

如果你試圖實例化一件T它會工作。但是如果你嘗試實例化一個T :: iterator,或者一個T :: your_random_typedef,它就不會。你需要使用'typename T :: your_random_typedef my_variable;'如果你想申報一個。 – BatchyX 2010-11-06 21:13:48

回答

4

沒錯,上述工作得很好,因爲這最小編譯示例所示:

template <class T> 
void foo(T arg) 
{ 
    T var = arg; 
} 

int main() 
{ 
    foo(23); 
    return 0; 
} 

的問題必須在其他代碼你還沒有發佈:)

+0

謝謝,我想這個問題會在別處。 – 2010-11-06 21:00:25

4

是的,這是可能的,如果T是可複製的,將工作。 它可能不適合如果T是具有私人拷貝構造函數的類工作:

class Noncopyable { 
private: 
    Noncopyable(const Noncopyable&); 

public: 
    Noncopyable() {} 
}; 

template <class T> 
void foo(T arg) { 
    T var = arg; 
} 

int main() 
{ 
    foo(Noncopyable()); 
}