c++ - 内部类模板循环引用

标签 c++ templates

有谁知道如何欺骗 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
   {
   };
}

最佳答案

遗憾的是,这不可能直接实现,因为 MyClassObservable 实例化时尚未完成,因此您无法访问任何 typedefs。您可以通过添加一个小包装器来解决此问题:

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/

相关文章:

c++ - 从 C++ 生成 C 包装器?

c++ - 在构造函数上启用_if

c++ - 可变参数模板和 std::array 意外行为

C++模板检查类型验证

c++ - 函数作为模板参数

c++ - `const_cast` ,顶级 const 和左值到右值的转换

复合赋值运算符的 C++ 概念

android - 使用 ndk arm-linux-androideabi-clang++ 编译器为 android 构建 grpc C++

c++ - 尽管有析构函数调用,但内存泄漏

c++ - 关于模板类中模板函数的小问题