使用名称空间和模板类访问变量

时间:2019-01-03 16:03:28

标签: c++ namespaces

我无法访问变量 width

A.h文件:

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 :(得分:2)

这与模板无关。它是关于类和对象的。 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;