本次验证有如下两个结论
1、C++通过嵌套类无法推断出外部类的模板实参。
2、C++内部类可访问外部类的私有成员。
#include <iostream>
#include <stdint.h>
template<typename Type>
class OuterClass
{
public:
class InnerClass;
public:
OuterClass(uint32_t nNum):m_OuterNum(nNum){}
private:
uint32_t m_OuterNum;
};
template<typename Type>
class OuterClass<Type>::InnerClass
{
public:
InnerClass(const OuterClass &outer): m_InnerNum(outer.m_OuterNum){}
private:
uint32_t m_InnerNum;
};
template<typename Type>
void Function(const typename OuterClass<Type>::InnerClass &inner)
{
return;
}
int main()
{
typedef OuterClass<uint32_t> IntOuterClass;
IntOuterClass intClass(99);
IntOuterClass::InnerClass innerClass(intClass);
Function(innerClass);//Error. Could not deduce template argument for 'Type'
return 0;
}