基本的に私が望むのは、クラス内にグローバル変数を用意して、GLOBAL_WRAPPER_TYPE
任意のデータ型を格納できるようにすることです。これまでのところ、以下のコードには問題がある可能性がありますが、から何も返そうとしない限りコンパイルされますWRAPPED
。
また、set 関数が適切に機能するかどうか、およびクラス=
からテンプレート型 T を取得するために演算子をオーバーロードする必要があるかどうかも疑問に思いました。WRAPPED
の「抽出」を機能させるのに問題があり、クラス内の関数が機能GLOBAL_WRAPPER_TYPE
するかどうかはわかりません。コンパイルはできますが、実行時エラーが発生する可能性があります (まだ実行していません)。set()
WRAPPED
コードでコンパイルエラーが発生しました...
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;
}