如何创建一个具有相同 class 成员的模板化 class?,在某个时候初始化它的值?,并尽可能避免使用指针

how to create a templated class that has a member of that same class?, initialized it's value at some point?, and avoid pointers if possible

假设我有一个模板化的 class 并且在其中 class 我想要同一个 class 的未初始化成员, 可能在某个时候我想初始化 class 的那个成员, 我将如何在 C++ 中执行此操作?,并且由于可能的内存泄漏,我也希望尽可能避免基于指针的解决方案,但如果不是这样,我仍然会接受基于指针的解决方案,我有以下代码:

#include <iostream>

template<typename T>
class self
{
    private:     
        int id;

    public:
        self() : id(-1) {}
        self(int id) : id(id) {}

        self inner_self;

        void init_inner_self(int id)
        {
            inner_self = self(id);
        }

        void show_self()
        {
            std::cout<<id<<'\n';
        }
};

int main()
{
    self<int> a(5);
    a.show_self();
    
    a.init_inner_self(3);
    a.inner_self.show_self();

    return 0;
}

如您所见,我有一个名为 template<typename T> class self 的模板 class,其中我有一个名为 inner_self 的成员,它与 class self 并且在实例化 self 对象时尚未初始化,我想稍后使用函数 void init_inner_self(int id); 来初始化该成员。

对于这段代码,我希望它能输出 ff。

5
3

但我什至不能编译它,编译器说

sample5.cpp: In instantiation of ‘class self<int>’:
sample5.cpp:28:16:   required from here
sample5.cpp:13:14: error: ‘self<T>::inner_self’ has incomplete type
   13 |         self inner_self;

我也试过把成员声明变成self<T> inner_self; 但仍然没有成功,有人可以帮忙吗?这种行为在 C++ 中是否可能或允许?

如果 class 包含自己作为成员,则该成员包含与包含相同 class 的成员相同的 class 与包含相同 class 作为包含相同 class 的成员作为包含相同 class 的成员...你能发现问题吗?

class 根本不可能包含自己类型的非静态成员。当然,class 在其自己的定义中并不完整,非静态成员必须具有完整的类型。

class 是否是 class 模板的实例对此没有影响。