Доступ к переменной с использованием пространства имен и класса шаблона - PullRequest
0 голосов
/ 03 января 2019

Я не могу получить доступ к переменной width .

Файл Ah:

namespace AN{
    template <typename T> class A{
    public:
        unsigned int width; #The variable
        ...
    }
}

Файл B.cpp:

#include "A.h"
using namespace AN;
namespace BN{
    bool something(){
        unsigned int * w = AN::&width;
    }
}

Я пробовал также AN :: A :: & width, но это не сработало.

1 Ответ

0 голосов
/ 03 января 2019

Это не имеет ничего общего с шаблонами.Это о классах и объектах.Адрес width определяется объектом, частью которого он является;без объекта нет ширины.

Однако без объекта вы можете создать указатель на член;это не обычный указатель (если бы он был, он назывался бы «указатель»).Например:

class A {
public:
    int width;
};

int A::*w = &A::width;

Вы используете его для доступа к этой переменной при создании объекта:

A a;
a.*w = 3;
A aa;
aa.*w = 4;

Если вам действительно нужно только одно значение width для каждый объект вашего типа, да, вы можете сделать его static членом:

class A {
public:
    static int width;
};
int A::width;

Теперь вы можете создать указатель на этот член как обычный указатель:

int* w = &A::width;

и вы можете использовать w в качестве обычного указателя:

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