Redian新闻
>
C++里面能否检测一个虚函数是否被重载?
avatar
C++里面能否检测一个虚函数是否被重载?# JobHunting - 待字闺中
E*y
1
国内是很一般学校的法律,这面好像也不好申学校找工作什么的吧
avatar
r*l
2
(CS版人气太差,发到这里请教一下各位高手)
如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
否被重载呢?
avatar
m*n
3
生孩子或去打黑工。

【在 E**********y 的大作中提到】
: 国内是很一般学校的法律,这面好像也不好申学校找工作什么的吧
avatar
d*x
4
没看懂。
如果你需要这样别扭的方案,往往是设计缺陷。

【在 r******l 的大作中提到】
: (CS版人气太差,发到这里请教一下各位高手)
: 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
: 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
: 否被重载呢?

avatar
p*n
5
整老公

【在 E**********y 的大作中提到】
: 国内是很一般学校的法律,这面好像也不好申学校找工作什么的吧
avatar
r*l
6
我想重写一个library提高它的效率。使用这个library的用户可以重载其中的一个函数
(但是大部分用户应该不会去重载它)。原始实现中,无论用户是否重载该函数,主程
序中都直接去调用它。如果它没被重载过,就直接返回了(因为父类中该函数什么都没
做)。而我的改动中,如果用户重载了该函数,则需要在调用该函数之前先多做一些准
备工作。因为这些准备工作可能很耗时,所以我希望能够判断该函数是否被重载过,不
知道有没有什么方法可以做到?

【在 d**********x 的大作中提到】
: 没看懂。
: 如果你需要这样别扭的方案,往往是设计缺陷。

avatar
L*f
7
嗯。这是国女的一项重大任务。
还有另一项任务,就是和大妈们
一起研究怎样争夺家庭经济大权。

【在 p***n 的大作中提到】
: 整老公
avatar
k*e
8
virtual function只能被derived class redefine吧
一个class的用户怎么能可以overload这个class的member function呢?

【在 r******l 的大作中提到】
: (CS版人气太差,发到这里请教一下各位高手)
: 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
: 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
: 否被重载呢?

avatar
a*6
9
想办法转专业学习。
avatar
r*l
10
哦,我对这些名词可能用的不准确。我就是想知道是否被derived class redefine过。
有没有方法可以做到?

【在 k****e 的大作中提到】
: virtual function只能被derived class redefine吧
: 一个class的用户怎么能可以overload这个class的member function呢?

avatar
i*r
11
法学院很赚钱啊

【在 a**********6 的大作中提到】
: 想办法转专业学习。
avatar
k*e
12
不知道RTTI是否可以做到

【在 r******l 的大作中提到】
: 哦,我对这些名词可能用的不准确。我就是想知道是否被derived class redefine过。
: 有没有方法可以做到?

avatar
m*n
13
不同的法律体系,没用。
比学艺术的过来还没用,人家起码可以教几个学生。

【在 i***r 的大作中提到】
: 法学院很赚钱啊
avatar
r*e
14
http://stackoverflow.com/questions/4741271/ways-to-detect-wheth

【在 r******l 的大作中提到】
: (CS版人气太差,发到这里请教一下各位高手)
: 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
: 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
: 否被重载呢?

avatar
E*y
15
这位说话可够mean的,是不是您老在生活中很失败,所以经常在网上泄愤?

【在 m******n 的大作中提到】
: 不同的法律体系,没用。
: 比学艺术的过来还没用,人家起码可以教几个学生。

avatar
m*s
17
人说的是学的东西没用,又不是说你没用,不必太敏感,实话而已

【在 E**********y 的大作中提到】
: 这位说话可够mean的,是不是您老在生活中很失败,所以经常在网上泄愤?
avatar
t*t
18
假设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();
}
};
avatar
i*r
19
考试申LAW SCHOOL,少上网玩,美国的考试都很容易的

【在 E**********y 的大作中提到】
: 这位说话可够mean的,是不是您老在生活中很失败,所以经常在网上泄愤?
avatar
a*0
20
如果重载的函数里call base的a不一样不行么

【在 t****t 的大作中提到】
: 假设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();
: }
: };

avatar
i*c
21
内联汇编?或者写一个函数,强迫用户在重载之前调用他。

【在 r******l 的大作中提到】
: 我想重写一个library提高它的效率。使用这个library的用户可以重载其中的一个函数
: (但是大部分用户应该不会去重载它)。原始实现中,无论用户是否重载该函数,主程
: 序中都直接去调用它。如果它没被重载过,就直接返回了(因为父类中该函数什么都没
: 做)。而我的改动中,如果用户重载了该函数,则需要在调用该函数之前先多做一些准
: 备工作。因为这些准备工作可能很耗时,所以我希望能够判断该函数是否被重载过,不
: 知道有没有什么方法可以做到?

avatar
A*t
22
类里面写virture somefunc() = 0;

【在 r******l 的大作中提到】
: (CS版人气太差,发到这里请教一下各位高手)
: 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
: 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
: 否被重载呢?

avatar
t*t
23
lz的意思是对绝大多数derived class来说call a()什么也不干
于是也就不需要每个derived class都来重新实现a()

【在 a*********0 的大作中提到】
: 如果重载的函数里call base的a不一样不行么
avatar
r*l
24
你这个大概跟我要的相反。我要的是当a被redefine的时候才执行do_something,你这
个是当a没被redefine的时候执行。我说的base class里面的a就是virtual void a() {
return; }而已。但是如果用户在derived class里面redefine了a的话,则base class
就要执行do_something。

【在 t****t 的大作中提到】
: 假设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();
: }
: };

avatar
w*r
25
检查一下函数指针地址
后来查了一下,这是不可能的。
avatar
t*t
26
我的意思是这样
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 的大作中提到】
: 你这个大概跟我要的相反。我要的是当a被redefine的时候才执行do_something,你这
: 个是当a没被redefine的时候执行。我说的base class里面的a就是virtual void a() {
: return; }而已。但是如果用户在derived class里面redefine了a的话,则base class
: 就要执行do_something。

avatar
r*l
27
这个还不行。我是实现一个library,derive class是用户写的,我不能控制用户在a()
里面做什么。而且,我需要如果用户redefine了a(),那我就要在base class里面调用
那个do_something()。

【在 t****t 的大作中提到】
: 我的意思是这样
: class base{
: public:
: virtual void a()
: {
: //do nothing
: }
: protected:
: void do_something()
: {

avatar
q*0
28
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
}
avatar
b*o
29
search for [reflection in c++]:
http://www.garret.ru/cppreflection/docs/reflect.html

【在 r******l 的大作中提到】
: (CS版人气太差,发到这里请教一下各位高手)
: 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
: 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
: 否被重载呢?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。