1
我用下面簡單的例子,工作中爲什麼一個模板類工作的明確的方法專業化沒有它的原型聲明的類
struct foo
{
template <typename t>
void funct(t a , t b)
{
std::cout << "Primary template called";
}
};
template<>
void foo::funct<std::string> (std::string a , std::string b)
{
std::cout << "Specialized";
}
上面的代碼是罰款和運行,但是我有點糊塗了方法聲明的類是:
template<>
void foo::funct<std::string> (std::string a , std::string b)
{
std::cout << "Specialized";
}
甚至沒有在類內簽名。我的假設下,如果我添加的方法到類的簽名上面的代碼會甚至工作,並使它看起來像這樣不幸的是錯誤的
struct foo
{
template <typename t>
void funct(t a , t b)
{
std::cout << "Primary template called";
}
template<> ---->Added Extra
void funct<std::string> (std::string a , std::string b); ----->Added Extra
};
template<>
void foo::funct<std::string> (std::string a , std::string b)
{
std::cout << "Specialized";
}
我的問題是爲什麼它這樣的表現?在類/結構之外的方法假定有帶有簽名
funct(std::string a , std::string b);
的方法,但有not.I將不勝感激,如果有人可以解釋這種行爲。
爲什麼不超載的功能? –
我知道我可以重載功能。我只是試驗和了解模板。我很好奇,爲什麼這發生在處理模板 –
我認爲這是因爲該模板已經聲明瞭該函數。 –