在這種測試代碼專門的模板:的函數簽名
#include <string>
#include <iostream>
using namespace std;
template <typename T> class Signal;
template <typename T, typename U>
class Signal<T (U)>
{
public:
Signal<T (U)>(T (*ptr)(U))
{
}
};
void Print(string const& str)
{
cout << str << endl;
}
int main(int argc, char *argv[])
{
Signal<void (string const&)> sig = &Print;
return 0;
}
爲什麼我寫template <typename T> class Signal;
?
爲什麼我必須指定它?
因爲你必須有一個主模板才能夠專門化一個模板。在這種情況下,主模板未實現。 – Praetorian
你不需要。如果您願意,您可以使用「T」和「U」使主模板參數化。這只是不夠靈活。 –