r******l 发帖数: 10760 | 1 (CS版人气太差,发到这里请教一下各位高手)
如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
否被重载呢? |
d**********x 发帖数: 4083 | 2 没看懂。
如果你需要这样别扭的方案,往往是设计缺陷。
【在 r******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : (CS版人气太差,发到这里请教一下各位高手) : 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况 : 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是 : 否被重载呢?
|
r******l 发帖数: 10760 | 3 我想重写一个library提高它的效率。使用这个library的用户可以重载其中的一个函数
(但是大部分用户应该不会去重载它)。原始实现中,无论用户是否重载该函数,主程
序中都直接去调用它。如果它没被重载过,就直接返回了(因为父类中该函数什么都没
做)。而我的改动中,如果用户重载了该函数,则需要在调用该函数之前先多做一些准
备工作。因为这些准备工作可能很耗时,所以我希望能够判断该函数是否被重载过,不
知道有没有什么方法可以做到?
【在 d**********x 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 没看懂。 : 如果你需要这样别扭的方案,往往是设计缺陷。
|
k****e 发帖数: 116 | 4 virtual function只能被derived class redefine吧
一个class的用户怎么能可以overload这个class的member function呢?
【在 r******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : (CS版人气太差,发到这里请教一下各位高手) : 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况 : 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是 : 否被重载呢?
|
r******l 发帖数: 10760 | 5 哦,我对这些名词可能用的不准确。我就是想知道是否被derived class redefine过。
有没有方法可以做到?
【在 k****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : virtual function只能被derived class redefine吧 : 一个class的用户怎么能可以overload这个class的member function呢?
|
k****e 发帖数: 116 | 6 不知道RTTI是否可以做到
【在 r******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 哦,我对这些名词可能用的不准确。我就是想知道是否被derived class redefine过。 : 有没有方法可以做到?
|
r*******e 发帖数: 7583 | 7 http://stackoverflow.com/questions/4741271/ways-to-detect-wheth
【在 r******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : (CS版人气太差,发到这里请教一下各位高手) : 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况 : 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是 : 否被重载呢?
|
d**********x 发帖数: 4083 | |
|
t****t 发帖数: 387 | 9 假设lz定义的这个base class function is void a()
在base定义另一个protected function do_something()
如果derived class reimplemented a()
class derived: public base{
virtual void a()
{
base::do_something();
}
}; |
a*********0 发帖数: 2727 | 10 如果重载的函数里call base的a不一样不行么
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 假设lz定义的这个base class function is void a() : 在base定义另一个protected function do_something() : 如果derived class reimplemented a() : class derived: public base{ : virtual void a() : { : base::do_something(); : } : };
|
|
|
i***c 发帖数: 26 | 11 内联汇编?或者写一个函数,强迫用户在重载之前调用他。
【在 r******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我想重写一个library提高它的效率。使用这个library的用户可以重载其中的一个函数 : (但是大部分用户应该不会去重载它)。原始实现中,无论用户是否重载该函数,主程 : 序中都直接去调用它。如果它没被重载过,就直接返回了(因为父类中该函数什么都没 : 做)。而我的改动中,如果用户重载了该函数,则需要在调用该函数之前先多做一些准 : 备工作。因为这些准备工作可能很耗时,所以我希望能够判断该函数是否被重载过,不 : 知道有没有什么方法可以做到?
|
A*******t 发帖数: 443 | 12 类里面写virture somefunc() = 0;
【在 r******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : (CS版人气太差,发到这里请教一下各位高手) : 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况 : 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是 : 否被重载呢?
|
t****t 发帖数: 387 | 13 lz的意思是对绝大多数derived class来说call a()什么也不干
于是也就不需要每个derived class都来重新实现a()
【在 a*********0 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 如果重载的函数里call base的a不一样不行么
|
r******l 发帖数: 10760 | 14 你这个大概跟我要的相反。我要的是当a被redefine的时候才执行do_something,你这
个是当a没被redefine的时候执行。我说的base class里面的a就是virtual void a() {
return; }而已。但是如果用户在derived class里面redefine了a的话,则base class
就要执行do_something。
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 假设lz定义的这个base class function is void a() : 在base定义另一个protected function do_something() : 如果derived class reimplemented a() : class derived: public base{ : virtual void a() : { : base::do_something(); : } : };
|
w********r 发帖数: 14958 | 15 检查一下函数指针地址
后来查了一下,这是不可能的。 |
t****t 发帖数: 387 | 16 我的意思是这样
class base{
public:
virtual void a()
{
//do nothing
}
protected:
void do_something()
{
//do something here
}
};
class derived : public base{
public:
virtual void a()
{
base::do_something();
}
};
我估计一般的情况是base pointer to derived class.
suppose there's another derived class.
class derived_2:public base{
// doesn't implement a()
};
base * p1 = new derived();
base * p2 = new derived_2();
p1->a(); //this class has reimplemented a(), it calls do_something()
p2->a(); //this class doesn't reimplemment a(), it does nothing.
{
class
【在 r******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你这个大概跟我要的相反。我要的是当a被redefine的时候才执行do_something,你这 : 个是当a没被redefine的时候执行。我说的base class里面的a就是virtual void a() { : return; }而已。但是如果用户在derived class里面redefine了a的话,则base class : 就要执行do_something。
|
r******l 发帖数: 10760 | 17 这个还不行。我是实现一个library,derive class是用户写的,我不能控制用户在a()
里面做什么。而且,我需要如果用户redefine了a(),那我就要在base class里面调用
那个do_something()。
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我的意思是这样 : class base{ : public: : virtual void a() : { : //do nothing : } : protected: : void do_something() : {
|
q******0 发帖数: 15 | 18 Will this resolve your problem? A_ex() is the your new interface provided to
library user.
class Base
{
virtual void A(); //virtual
void A_ex(); // non-virtual
}
void Base::A()
{
//do nothing
}
void Base::A_ex()
{
A();
}
class Derived
{
virtual void A();
}
void Derived::A()
{
//do something specific to Derived
} |
b*****o 发帖数: 715 | 19 search for [reflection in c++]:
http://www.garret.ru/cppreflection/docs/reflect.html
【在 r******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : (CS版人气太差,发到这里请教一下各位高手) : 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况 : 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是 : 否被重载呢?
|