C++ C++;操作员->;()过载

C++ C++;操作员->;()过载,c++,memory,overloading,operator-keyword,member,C++,Memory,Overloading,Operator Keyword,Member,好吧,既然这是我的第一个问题,让我再试一次。我编辑了这篇文章,修改了代码,让大家更容易理解 template <typename T> class Structure { protected: DWORD64 _instanceAddress; T _structPointer; public: Structure<T>(DWORD64 instanceAddress); ~Structure(); T* operator->

好吧,既然这是我的第一个问题,让我再试一次。我编辑了这篇文章,修改了代码,让大家更容易理解

template <typename T>
class Structure
{
protected:
    DWORD64 _instanceAddress;
    T _structPointer;
public:
    Structure<T>(DWORD64 instanceAddress);
    ~Structure();
    T* operator->();
};

template <typename T>
T* Structure<T>::operator->()
{
    Driver::ReadMemory( _instanceAddress, sizeof(T), &_structPointer );
    return static_cast<T*>( &_structPointer );
}

struct C
{
    int some_value;
}

struct B
{
    C *pointer_to_C;
}

struct A
{
    B *pointer_to_B;
}

//CODE

Structure<A> myStructure(DWORD64 AddressInMemory);

myStructure->pointer_to_B->pointer_to_C->some_value;
检查
var\u name
是否为
int
float


如果没有,则定义新的
结构
并将其存储在某个地方,然后调用其
运算符->()

您可以将可以应用
运算符->
的任何内容从
运算符->
返回(它在结果中不断被调用,直到您得到
T*
)。这意味着您可以从
操作符->
返回一个智能指针,但我不知道这是否对您有帮助。顺便说一句-如果您的类有
init
函数,那么您的类就有问题。请减少问题中的代码量,因为有太多的内容需要阅读,而且大部分与你的具体问题无关。@erip。我不同意武断地使用这种说法。它通常是对的,有时不是。这不是一个宗教论坛,所以让我们集中回答Paulk的问题。CHIEL C++提供了一个构造函数,这是一个<代码> init < /C>函数应该是什么。唯一的区别是构造函数可以处理失败。我认为这根本不是教条:如果不使用
init
函数,就不需要重载。这样想仅仅是回答问题而不是提供解决方案是错误的。
template <typename T>
T* Structure<T>::operator->(type_of_desired_variable var_name)