2013-10-26 58 views
0

如果我有一個T類型的泛型類,並且我有一個返回T的函數,並且我希望我的函數返回特定字符串(如果typeid(T)== typedef串)?返回指定類型的泛型函數

template<class T> 
class Class1 
{ 
public: 
    Class1(); 
    ~Class1(); 
    T func(); 
}; 


template <class T> 
T Class1<T>::func() 
{ 
    string d = "T = string"; 
    if (typeid(string) == typeid(T)) 
     return (T)d; <-- here I got the problem 
} 
+1

什麼是你想在所有嗎?你如何使用這段代碼?什麼是「問題」/錯誤? –

+2

顯式專業化。 – dyp

+1

沒有這樣的東西作爲「通用類」。只有「班級模板」。這種誤解似乎是許多初學者混淆的根源。 –

回答

6

下面是一個模板類的成員函數的明確分工的一個例子:

#include <iostream> 
#include <string> 

template<class T> 
class Class1 
{ 
public: 
    Class1() {} 
    ~Class1() {} 
    T func(); 
}; 


template <class T> 
T Class1<T>::func() 
{ 
    std::cout << "non-specialized version\n"; 
    return T(); 
} 

template<> 
std::string Class1<std::string>::func() 
{ 
    std::cout << "string version\n"; 
    return "woot"; 
} 

int main() 
{ 
    Class1<int>().func(); 
    Class1<std::string>().func(); 
} 
+0

謝謝你。這正是我需要的。 – DalekSupreme