c++ - 使用命名空间和模板类访问变量

标签 c++ namespaces

我无法访问变量宽度

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 但效果不佳。

最佳答案

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

关于c++ - 使用命名空间和模板类访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54025850/

相关文章:

c++ - A* 寻路问题。编译,但行为异常

c++ - 计算单值子树

c++ - header 中 namespace 内的运算符声明?

import - Idris2 中的 `import using` 或 `import hiding`

android - 基类成员函数直接访问子类成员函数?

c# - 在结构 C# 中使用半字节

c++ - 将字符串列表从 QML 发送到 C++

PHP 扩展一级文件夹返回

c# - 将 xmlns 属性添加到我的 XML 文档中的根元素时,我的 linq 查询不起作用

C++ 命名空间和模板