C :如何区分对类成员的引用和对普通变量的引用
C++: How to distinguish between a reference to a class member and a reference to an ordinary variable?
是否有任何可能的方法来确定参考变量是否是指类成员(然后确定其属于哪个类)而不是普通变量?这是一个简单的示例,希望显示我的收入:
class A
{
private:
unsigned int x;
public:
A() : x(15) { }
unsigned int& GetX() { return x; }
};
int main( void )
{
A a;
unsigned int y = 12;
unsigned int& yr = y;
unsigned int& xr = a.GetX();
// Is there anyway of identifying, using typeid() or something
// similar, whether xr refers to x inside class A or is its type
// completely indistinguishable from that of yr? i.e. does its type
// information contain anything along the lines of
// typeid(xr).name() == "A::unsigned int&" that identifies it as
// belonging to class A?
return 0;
}
编辑:
不,没有办法这样区分。你为什么要?听起来 可疑地像XY问题。
好吧,也许我的例子太简单了,也许我不是问正确的问题,所以让我给你一个更详细的例子:
考虑上述A类。在大多数情况下,我想使用getter方法来查询x的值,因此返回常数引用通常是需要的(在我的真实代码中,x实际上是一个很大的向量或矩阵,因此按值返回可能会很慢)。但是在某些特殊情况下,我可能希望能够根据以前的问题更改x-的值 - 即用户指定函数内部的函数包装器的函数:C :通用函数包装程序类作为非非非函数的成员 - 模板类。因此,当将函数绑定到功能包装器时,用户函数将使用getter方法和辅助类别删除const限定器的参数,例如。
A.BindFunc( UserFunc, WriteAccess::GetNonConstRef( A.GetX() ) );
WriteAccess
助手类如下:
class WriteAccess
{
public:
template <typename T>
static T& GetNonConstRef( const T& x )
{
return const_cast<T&>(x);
}
};
,用户提供的功能可能是:
void UserFunc( unsigned int& X )
{
X = somethingelse;
}
但是,我想防止WriteAccess::GetNonConstRef()
方法与任何旧类成员一起使用,并且仅允许它与A类(和派生类)一起使用。因此,我想知道是否可以确定WriteAccess::GetNonConstRef()
内的哪个类别的参考属于哪个类,以便如果使用其他类,则不会编译或执行。
因此,我在想是否有某种方法可以区分对普通变量的参考和班级成员的参考(确实是对A类成员的引用以及对其他班级成员的引用),那么这可能会对我有所帮助。
如何区分对类成员的引用和对普通变量的引用?
通常,这是不可能的。引用不包含对象容器的信息。子对象与独立对象没有区别。
typeid
不会有任何帮助。变量的完全合格名称不是变量的类型名称的一部分。
但是,可以测试参考(或指针)是指特定容器实例的特定成员:
bool xr_refers_to_x_of_a = &xr == &a.GetX(); // true
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 多个"常量引用"变量可以共享同一个内存吗?
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- C++方法中的引用变量
- 作为赋值(增加引用变量)C++的左操作数所需的左值
- 使用更改此变量的函数在同一行中打印引用变量
- 将延迟变量分配给引用变量
- 如何通过引用获取引用变量的地址?
- 将引用变量传递给函数
- C++中引用变量的内存?
- 按名称存储和引用变量列表
- 返回一个C++引用变量 VS 返回一个变量
- c++ 在 if 语句中分配引用变量
- 引用变量何时合适,为什么?你能解释一下实际的语法和位置吗?
- C++ - 将一个变量分配给另一个变量和将变量分配给引用变量有什么区别?
- 在类范围内声明时,应在 C++14 中引用变量模板
- 当引用变量的引用"死亡"时,它会发生什么?
- 将非按引用变量分配给返回按引用的函数,反之亦然
- 引用变量如何存储在mem中
- 引用变量存储在哪里