Учитывая следующий код/схему, представленную ниже, возможно ли как-то опустить необходимость указывать this
?
Есть ли способ изменить код, чтобы функция/конструктор автоматически получал окружающую область видимости, возможно, даже в качестве аргумента шаблона?
#include <iostream>
class AttrBase{
public:
virtual int g()const = 0;
};
class ABase{
public:
void reg(const char* name, AttrBase* att){
std::cout << name << ": " << att->g()<< std::endl;
}
};
class Attr : public AttrBase{
public:
Attr(const char* name, int val, ABase* parent /* = this */) // something like this
:v(val)
{
parent->reg(name, this);
};
int g()const override{return v;};
int v;
};
class D:public ABase{
Attr a{"a", 1, this};
Attr b{"b", 2, this};
Attr c{"c", 3}; //< is this somehow possible
};
int main(){
D d;
}
Attr MakeAttr(const char* name, int val) { return Attr(name, val, this); }
. ВD
вы пишетеAttr a{ MakeAttr("a", 1) };
- person Raymond Chen   schedule 18.12.2019