基本上我想要的是在一个类中有一个全局变量GLOBAL_WRAPPER_TYPE
,以便我可以存储任何数据类型。到目前为止,我有下面的代码可能有其缺点,但只要你不尝试从WRAPPED
返回任何东西,它编译。试图用模板编译嵌套类?
我还想知道我的设置功能是否正常工作,是否需要重载=
运算符以从WRAPPED
类中检索模板类型T.我无法使GLOBAL_WRAPPER_TYPE
的“提取”工作,我不确定WRAPPED
类中的set()
函数是否可以工作。它编译但可能会发生运行时错误(尚未运行)。
我没有得到一个编译器错误的代码...
nested_class_global_template.cpp|44|error: invalid use of nonstatic data member 'WRAPPER<NODE>::GLOBAL_WRAPPER_TYPE'|
由于线路62 NODE temp = WRAPPING.INSIDE.get();
但代码中并没有编译该行,我只是不确定set()
功能工作。
最后,我想知道如何将NODE*
声明为一个指针会将所有东西都看上去不是静态的?
继承人的代码。
#include <iostream>
using namespace std;
class NODE
{
int data;
public:
NODE(){}
~NODE(){}
NODE(int data)
{
this->data = data;
}
void print()
{
std::cout<<"data: "<<this->data<<std::endl;
}
};
template <class T>
class WRAPPER
{
public:
T GLOBAL_WRAPPER_TYPE;
WRAPPER(){}
~WRAPPER(){}
class WRAPPED
{
public:
WRAPPED(){}
~WRAPPED(){}
void set(T GLOBAL_WRAPPER_TYPE)
{
GLOBAL_WRAPPER_TYPE = GLOBAL_WRAPPER_TYPE;
}
T& get()
{
return GLOBAL_WRAPPER_TYPE;
}
WRAPPED& operator=(const WRAPPED &INSIDE)
{
GLOBAL_WRAPPER_TYPE = INSIDE.GLOBAL_WRAPPER_TYPE;
return *this;
}
};
WRAPPED INSIDE;
};
int main()
{
WRAPPER<NODE> WRAPPING;
WRAPPING.INSIDE.set(NODE(99));
NODE temp = WRAPPING.INSIDE.get();
return 0;
}
编辑这一个作品!
#include <iostream>
using namespace std;
class NODE
{
int data;
public:
NODE(){}
~NODE(){}
NODE(int data)
{
this->data = data;
}
void print()
{
std::cout<<"data: "<<this->data<<std::endl;
}
};
template <class T>
class WRAPPER
{
public:
static T GLOBAL_WRAPPER_TYPE;
WRAPPER(){}
~WRAPPER(){}
class WRAPPED
{
public:
WRAPPED(){}
~WRAPPED(){}
void set(T GLOBAL_WRAPPER_TYPE)
{
WRAPPER::GLOBAL_WRAPPER_TYPE = GLOBAL_WRAPPER_TYPE;
}
T& get()
{
return GLOBAL_WRAPPER_TYPE;
}
WRAPPED& operator=(const WRAPPED &INSIDE)
{
GLOBAL_WRAPPER_TYPE = INSIDE.GLOBAL_WRAPPER_TYPE;
return *this;
}
};
WRAPPED INSIDE;
};
template <class T>
T WRAPPER<T>::GLOBAL_WRAPPER_TYPE;
int main()
{
WRAPPER<NODE> WRAPPING;
WRAPPING.INSIDE.set(NODE(99));
NODE temp = WRAPPING.INSIDE.get();
temp.print();
return 0;
}
我怀疑你的意思是'不做你的想法'。它的奇怪之处在于'WRAPPED'不能“看见”GLOBAL_WRAPPER_TYPE。我怎么会这样做,虽然“定义另一个让WRAPPED持有对WRAPPER的参考。”? – pandoragami
只是认为WRAPPER和WRAPPED是两个不同的类。 – billz
我是否从WRAPPED声明WRAPPER,然后调用GLOBAL_WRAPPER_TYPE? – pandoragami