gex*_*ide 1 c++ templates c++11
从模板类继承时,我需要为派生类中访问的所有基类成员添加前缀this:
template<typename T>
struct X{
int foo;
void bar();
};
template<typename T>
struct Y : public X<T> {
void blub(){
foo++; // Does not work
this->foo++; // Fine
bar(); // Does not work
this->bar(); // Fine
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所暗示的那样,你必须在会员面前添加前缀的原因this已在此处得到解答.所以我剩下的问题是:有没有办法避免所有的thises?例如,我在派生类中有一个使用大量基类成员的方法.代码看起来完全混乱了所有this->内容.有没有办法省略这些?
为了使这项工作,你需要把非依赖的名字foo,并bar为相关的名称.有三种方法可以做到这一点:
this正如您所做的那样,使他们符合资格.这有一个缺点,你需要在使用名称的任何地方都这样做. this隐含地是一个从属名称.X<T>::foo和X<T>::bar.这也需要在您使用它们的任何地方完成,并且如果它们变成虚拟方法,则还会破坏虚拟分派机制.using X<T>::foo;和将依赖名称放入非依赖名称空间using X<T>::bar;.或者,您可以使用VC++进行编译,而VC++对依赖名称和非依赖名称之间的区别并不在意.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |