Foo.h
template<typename A, typename B>
class Foo{
public:
Foo();
/*..*/
};
Foo.cpp
template<typename A, typename B>
Foo<A, B>::Foo(){/*...*/}
template<typename A>
Foo<A, Beta>::Foo(){/* some specialized construction */} //<- this doesn't work.
template<>
Foo<Alpha, Beta>::Foo(){/*...*/} // <-will work, but I want partial specialization.
当我编译时,部分特化的构造函数抛出一个错误
nested name specifier 'Foo::' for declaration does not refer into a class, class template or class template partial specialization
我想我需要在某个地方声明这个部分特化的类,但我不想一直重新声明同一个类......即我不想在标题中放置以下内容文件:
template<typename A>
class Foo_Beta : public Foo<A, Beta>{
public:
Foo_Beta();
}
//in cpp
template<typename A>
Foo_Beta<A>() : Foo<A, Beta>() {/**specialized constructor stuff**/}
因为那时我无法构造使用 Foo_Beta 构造函数的 Foo()。
我试过了
template<typename A>
class Foo<A,Beta> : public Foo<A, Beta>{
public:
Foo();
}
但这也不能编译。
本质上,声明一个类的偏特化而不重新声明该类的所有内部函数的语法是什么?
最佳答案
你说:
template<typename A> Foo<A, Beta>::Foo(){/* some specialized construction */} //<- this doesn't work.
只有当你专攻整个类(class)时,你才能使用它。您不能只特化类的一个成员函数。
以下应该有效:
template<typename A> class Foo<A, Beta>
{
Foo();
};
template<typename A>
Foo<A, Beta>::Foo()
{
}
关于C++ 源代码中类的部分特化而不是头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823235/