如何创建一个具有相同 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 模板的实例对此没有影响。
假设我有一个模板化的 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 模板的实例对此没有影响。