有谁知道如何欺骗 C++ 编译器来编译类似的东西(条件是 TheObservedObject 保留在 MyClass 中):
template< typename Type >
class Observabile
{
public:
typename typedef Type::TheObservedObject TheObject;
void Observe( TheObject& obj ) {}
};
class MyClass : public Observabile< MyClass >
{
public:
class TheObservedObject
{
};
}
最佳答案
遗憾的是,这不可能直接实现,因为 MyClass
在 Observable
实例化时尚未完成,因此您无法访问任何 typedef
s。您可以通过添加一个小包装器来解决此问题:
template< typename Type, typename Wrapper >
class Observable
{
public:
typename typedef Wrapper::TheObservedObject TheObject;
void Observe( TheObject& obj ) {}
};
struct MyClassWrapper{
class TheObservedObject
{
};
};
class MyClass : public Observable< MyClass, MyClassWrapper>
{
public:
typedef MyClassWrapper::TheObservedObject TheObservedObject;
};
或者通常只是将 TheObservedObject
放在 MyClass(Wrapper)
之外。
关于c++ - 内部类模板循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6501374/