Как создать переопределенные псевдонимы типов, которые не возвращаются при закрытой области видимости в C ++? - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь реализовать класс с функциональностью std :: any.Более того, я решил избавиться от аналога std :: any_cast, если это возможно, поэтому я могу просто получить доступ к значению, хранящемуся в экземпляре класса, без явного указания его типа при выполнении доступа.

Я попытался использовать ключевое слово typedef, поскольку оно позволяет переопределять псевдоним типа, однако, когда конструктор или область действия operator= закрываются, тип возвращается к void *.

Есть ли у вас какие-либо идеи?о том, как можно было бы реализовать что-то вроде этого?

То, что у меня есть на данный момент, примерно так:

#include <iostream>
#include <vector>
#include <string>
class any
{
public:
    any(){}
    template<typename T>
    any(const T&& other) : _ptr(new T(std::forward<const T>(other))), t(1)
    {
        typedef T _type;
        bool b = *(_type*)_ptr == other;
        _type tmp = *(_type*)_ptr;
    }
    template<typename T>
    void operator=(const T&& other)
    {
        typedef T _type;
        if(_ptr) delete _ptr;
        _ptr = new T(std::forward<const T>(other));
    }
    bool operator==(const any&& rval) const
    {
        try {
            return *(_type*)_ptr == *(_type*)rval._ptr ? true : false;
        }
        catch (...)
        {
            return false;
        }
    }
    bool operator==(const any& lval) const
    {
        try {
            return *(_type*)_ptr == *(_type*)lval._ptr ? true : false;
        }
        catch (...)
        {
            return false;
        }
    }
    friend std::ostream& operator<<(std::ostream& os, any& val);
    auto val()
    {
        auto a = *(_type*)_ptr;
        return a;
    }
    operator bool()
    {
        return _ptr ? true : false;
    }
    ~any()
    {
        delete _ptr;
    }
    typedef void* _type;
private:
    void * _ptr;
};
std::ostream& operator<<(std::ostream& os, any& val)
{
    os << val.val();
    return os;
}

Ну, я могу просто определить функцию any_cast для классаоднако, это не то, чем я занимаюсь в своих исследовательских целях.

Любой совет будет оценен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...