我想专门化一个类模板的构造函数。这不起作用:
template<typename T>
struct One {};
template<typename T>
struct Two {};
template<template<typename> class T, template<typename> class U>
struct Three : public T<Three<T, U>>, public U<Three<T, U>> {};
template<typename T> struct Four;
template<typename T>
struct Four
{
Four();
};
template<template<typename> class T, template<typename> class U>
Four<Three<T, U>>::Four() {}
int main(int argc, char *argv[])
{
Four<Three<One, Two> > obj;
}
但是将类模板定义更改为此有效:
template<typename T> struct Four;
template<template<typename> class T, template<typename> class U>
struct Four<Three<T, U>>
{
Four();
};
template<template<typename> class T, template<typename> class U>
Four<Three<T, U>>::Four() {}
这似乎我正在专门研究整个类模板。但是,我只想专门化上面代码中的构造函数——那个不起作用。为什么我不能专门化Four
for just的构造函数Three
(我没有更改类模板的 ctor 的签名)?