Sınıf şablonunda tanımlanan statik üye işlevine erişmeye çalışıyorum. başlık dosyası TemplateTest.h olarak ben gibi birincil sınıf Şablon tanımlanmış:Statik üye işlevi sınıf şablonu uzmanlığı içinde
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
Ben bir uzmanlık koymak Sonra Kaynak TemplateTester.cpp File
:
#include "TemplateTest.h"
template<>
struct TemplateTest<int, bool>
{
static void invoke()
{
std::cout << "invoke<int, bool>" << std::endl;
}
};
template struct TemplateTest<int, bool>; //instantiate to resolve linker issue
açıkça böylece bağlayıcı giderir ile sınıf örneği doğru şekilde. Sürücü driver.cpp olarak
: Ben sürücü sınıfına bağlamak çalıştığımda g ile TemplateTest.cpp derlerkeninclude "TemplateTest.h"
int main()
{
TemplateTest<int, bool>::invoke();
return 0;
}
++ doğru nesne dosyası oluşturur ama benim bağlayıcı hatası "veriyor 'TemplateTest :: invoke() "
tanımlanmamış başvurular this one gibi diğer ilgili iletilerden geçtim ama bir işlev şablonuna erişmeyi denemiyorum.
Herhangi bir ipucu çok takdir edilmektedir.
Uygulamayı başlık dosyasına taşıyın. Şablonun uygulamaları, bunları kullanarak tüm TU'ya görünür olmalıdır. –