#include <cstdlib>
template<class A> struct Foo
{
template<class B> static bool Bar();
};
template<class B> template<class A> bool Foo<A>::Bar<B>()
{
return true;
}
int main()
{
bool b = Foo<int>::Bar<long>();
b;
}
定義模板類的模板成員分開這導致鏈接錯誤:從宣言
main.obj : error LNK2019: unresolved external symbol "public: static bool __cdecl Foo<int>::Bar<long>(void)" ([email protected]@[email protected]@@SA_NXZ) referenced in function main
我需要定義類模板的聲明之外這個成員函數。換句話說,我不能這樣做:
#include <cstdlib>
template<class A> struct Foo
{
template<class B> static bool Bar()
{
return true;
}
};
int main()
{
bool b = Foo<int>::Bar<long>();
b;
}
我在想什麼?我如何定義這個成員函數模板?需要什麼語法?
注意:我正在使用MSVC 2008,以防萬一。
編輯
我想的第一件事就是扭轉template<class A>
和template<class B>
順序:
#include <cstdlib>
template<class A> struct Foo
{
template<class B> static bool Bar();
};
template<class A> template<class B> bool Foo<A>::Bar<B>()
{
return true;
}
int main()
{
bool b = Foo<int>::Bar<long>();
b;
}
這就產生了一個編譯器錯誤:
.\main.cpp(11) : error C2768: 'Foo<A>::Bar' : illegal use of explicit template arguments
上的大括號定義爲Bar
函數。
這是我第一次嘗試。這導致了編譯器錯誤。我將編輯OP。 – 2011-04-29 21:50:56