在友元函数 c++ 中模拟"this"指针概念
Simulating "this" pointer concept in friend function c++
- 我有一个类a的友元函数"fun()"。fun引用了类型a的对象。假设objname是"obj"
- 在fun()friend函数中,为了访问类A的元素,需要obj.member。因为有大量的成员,我想跳过这个"obj.member",说"member"应该指代传递的对象
有没有办法做到这一点?比如在函数的顶部声明一些东西,因为我不需要一次又一次地说"obj.something",只有"something"就可以了。
我的示例代码如下。
#include<iostream>
using namespace std;
class A{
private:
int x;
char c;
string s;
public:
A(int x, char c, string s) : x(x), c(c), s(s){};
friend void fun(A& obj);
};
void fun(A &obj){
//is there any thing here i can use on top so that i don't need to refer obj.x or obj.c or obj.s ...so on?
// anything like "using" ... which can tell which ?
//In that way i want to similulate hidden this pointer concept.
int x = obj.x;
char c = obj.c;
string s = obj.s;
//.....similarly accessing other elements of obj
cout<<x<<" "<<c<<" "<<s<<" "<<endl;
}
int main()
{
A obj(20,'Z',"friend");
fun(obj);
return 0;
}
简单的答案是你做不到——或者看起来有效的东西真的是个坏主意。
在friend(或任何非成员)函数中,对对象的所有引用(访问数据成员、调用非静态成员函数)都需要使用obj.<whatever>
语法。
真的,你的问题反映了一种虚假经济的感觉——有点像尼禄在罗马大部分地区被烧毁时在屋顶上摆弄。在一些语句上额外键入obj.
是微不足道的,而减少键入负担的技术会使您的代码变得不那么清晰、更难理解,并且对未来的开发人员(很可能包括您自己)来说更令人困惑。
你可以尝试用宏做一些事情
#define X obj.
char c = X c;
但这并不能节省键入的时间,而且所提供的代码会让谦逊的C++程序员(包括你自己)感到困惑。所以这不是一个好主意。
你也可以尝试做一些类似的事情
void fun(A &obj)
{
obj.fun(); // call a member function that does everything needed
}
但这在实践中有点毫无意义&仍然需要定义成员函数,如果您有,那么几乎不需要非成员版本。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 关于C++中具有多重继承"this"指针的说明
- Doees the 'this' 指针参与虚函数的多态行为
- 为什么成员函数内的"this"指针为空?
- "this"指针的值在对象的生存期内是否恒定?
- 如何将'this'指针传递给C++ WinAPI 线程?
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 'this'指针是否可以在 c++ 标头声明中使用?
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 为什么直接传递"this"指针来存档是一个错误,而另一个相同类型的指针是可以的?
- C++虚拟方法,不需要"this"指针 - 优化
- 指向成员函数签名的指针中缺少"this"指针
- 是否可以获取'this'指针的地址?
- 静态类成员不是与 this 指针没有关联吗?
- 为什么有必要将"this"指针作为"arg"参数传递给pthread_create
- 编译错误:2 个重载没有'this'指针的合法转换。使用结构
- 对象的"this"指针是否等于指向其(单个)基类的指针?
- Do=在lambda的捕获列表中捕获this指针
- 将"this"指针传递给析构函数中的其他类/函数