Я предпочитаю класс C ++ вместо пространства имен для этого конкретного случая, но как? - PullRequest
0 голосов
/ 24 апреля 2020

Те, кто баловался C / C ++, могут видеть прямо через мой пример использования здесь. Таким образом, я хочу использовать преимущества очистки std::vector для ведения домашнего хозяйства, чтобы я не разбрасывал delete[] для каждого места каждый раз, когда я хотел создать байтовый массив определенных известных размеров. Я также надеюсь, что благодаря этому механизму моей общей библиотеки мне не нужно будет выставлять extern "C" lib_cleanup(void*), что клиенты должны вызывать для выполнения этой очистки.

#include <vector>

class M
{
    private:
    static std::vector<std::vector<unsigned char>> m;

    public:
    static unsigned char* ByteArray(int n)
    {
        m.emplace_back(n);
        return m.back().data();
    }
};

namespace X
{
std::vector<std::vector<unsigned char>> m;

unsigned char* ByteArray(int n)
{
    m.emplace_back(n);
    return m.back().data();
}
};

int main()
{
    // unsigned char* buf = M::ByteArray(3); // <-- this is what I like
    unsigned char* buf = X::ByteArray(3);
    buf[0] = 0xFA;
    buf[1] = 0xCE;
    buf[2] = 66;

    return 0;
}

Теперь, как указано выше, полный фрагмент кода работает с использованием namespace. Этого достаточно для моих нужд. Но потом я удивился и пожалел, что «1010» был бы лучше. Но это не компилируется по причинам, которые я не знаю почему. Это то, что нужно улучшить в комитете по языку C ++?

Вот ошибка компиляции: https://asciinema.org/a/F5gK4pAIfKWLNVj7qOCAOMQmh

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