Anlamak istediğim şablon uzmanlığı konusunda bir sorunum var. Visual C++ 10.0 (2010) ile çalışıyorum. Ben "get" yöntemi uzmanlaşmış çünkü bağlayıcı bir nesne dosyasından almak gerekir, TeorideŞablon uzmanlığı bağlantı kurmada başarısız oluyor
class VariableManager
{
public:
template<typename VarT>
VarT get(std::string const& name) const
{
// Some code...
}
// This method supposed to be fully evaluated, linkable method.
template<>
std::string get<std::string>(std::string const& name) const;
private:
std::map<std::string, boost::any> mVariables;
};
: Böyle bir sınıf var. Ben kaynak dosyada yöntemini yerleştirirseniz Bunun yerine, bağlayıcı ilişkin çözülemeyen referans hatası alıyorum:
template<>
std::string VariableManager::get<std::string>(std::string const& name) const
{
// Doing something...
}
ben satır içi olarak başlık dosyasına bu yöntemi yerleştirirseniz, yapı gayet güzel gidiyor. Ben bu kadar bu şablon işlevleri anlıyorum:
template<typename VarT>
VarT get(std::string const& name) const;
derleyici arama kodlarına göre şablonu uzmanlaşmak mümkün olmayacaktır çünkü başlığında yer ama tam uzmanlaşma durumunda öyle olmalıdır Bu nedenle sınıflandırma uygulaması, özel şablon yöntemi zaten bir halk sembolü olarak var olmalıdır. Birisi bu konuda biraz ışık tutabilir mi?
Komik, ama standart uyum sorunu sorun oldu. Bildiriyi sınıftan çıkardım ve önerdiğin gibi uzmanlık-beyannameyi yaptım ve linker hiç sorun yaşamadı. Uzmanlıkların sınıfın kapsamı dışında ilan edilmesi gerektiğini hatırlamakta fayda var. Nazik yardımlarınız için teşekkürler! – progician
Cevabınızı bulmak benim için gerçek bir şans. Şablon uzmanlığını bir sınıf içinde bırakıp derleyiciyi bulamıyorsa, derleyicinin yaptığı şey benim için hala bir gizem. Ancak, kesinlikle benim günümü kurtardın! – Nipheris