我们可以为属于 class 模板的 class 模板定义超出 class 的定义吗?

Can we have an out of class definition for a class template that is a member of a class template

我知道以下代码段有效:

template<typename T>
struct Custom 
{
    template<typename V> void func();
};

//valid
template<typename T> 
template<typename V>
void Custom<T>::func()
{
    
}

但是我们可以对 class 模板 而不是 成员函数模板 做同样的事情吗?举个例子,

template<typename T>
struct Custom 
{   //declaration here
    template<typename V> struct InnerCustom;
};

//can we define the class template `InnerCustom` outside?
template<typename T> 
template<typename V>
Custom<T>::InnerCustom
{
    
};

我的问题是,我们可以为 class 模板成员 InnerCustom 提供一个超出 class 的定义,就像我们为成员函数模板 func 所做的那样吗?如果是这样,我该怎么做。另外,if 不就是造成这种差异的原因吗

是的,您可以根据 class 定义 InnerCustom:

template <typename T>
template <typename V>
struct Custom<T>::InnerCustom { // note: `struct` added
    // ...
};