0
我有兩個共享庫中的類。共享庫中的模板類只能使用隱式和顯式實例化
--- foo.h
template <class T>
class Foo
{
Foo();
void doSomething(void);
...
};
--- foo.cpp
#include "foo.h"
#include "bar.h"
template <class T>
Foo:Foo()
{
};
template <class T>
void Foo::doSomething(void)
{
};
// Here I put the explicit/implicit instantiations (see below)
--- bar.h
template <class T>
class Bar
{
...
};
--- bar.cpp
template <class T>
class Bar
{
...
};
template class Bar<int>;
和使用那些主要功能:
#include "foo.h"
#include "bar.h"
int main(void)
{
Foo<Bar<int> > foobar; // Or Foo<int> foobar; for version 5
foobar.doSomething();
}
現在,爲了使這項工作我要實例富。有5種方法,我想這樣做:
版本1:顯式實例(不工作)
template class Foo<Bar<int> >;
版本2:隱式實例光(不工作)
void dummy(void){Foo<Bar<int> > foobar;}
版本3:隱式實例(不工作)
void dummy(void){Foo<Bar<int> > foobar; foobar.doSomething();}
版本4:隱式和顯式實例(WO RKS)
template class Foo<Bar<int> >;
void dummy(void){Foo<Bar<int> > foobar; foobar.doSomething();}
5版:與非模板類(工程顯式實例)
template class Foo<int>; // Works, if you change the main as well
爲什麼只針對Foo<Bar<int> >
4版的工作?爲什麼Foo<int>
工作,但Foo<Bar<int> >
不?對於不工作的我會得到'未定義參考'錯誤。代碼非常簡單,並且代碼非常簡單,但是很難將代碼分解到不再工作的地步,因爲它嵌入了一個相當複雜的項目中。我主要在這裏尋找提示,可能會導致這種情況。
目前尚不清楚「不工作」到底是什麼,你在哪裏得到'未定義參考'錯誤?你不能只把模板體放到cpp中,並建立共享庫。 – VTT
我得到'Foo'構造函數的未定義參考。我知道,這就是爲什麼我想使用顯式實例化,但它似乎沒有工作。 – Shadowigor