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.
当我编译时,部分专用的构造函数会引发错误
用于声明的嵌套名称说明符 'Foo::' 不引用类、类模板或类模板部分特化
我想我需要在某个地方声明这个部分专业化的类,但我不想继续重新声明同一个类......即我不想将以下内容放在头文件中:
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();
}
但这也不能编译。
本质上,声明一个类的部分特化而不重新声明该类的所有内部函数的语法是什么?