boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - C++里面能否检测一个虚函数是否被重载?
相关主题
问一个placement new 和 operator new的问题
c++ new的一个问题
问个题目 C++
给大家列几个C++的盲点
一般电面C++会问到什么专业问题?
问个超级小问题
Bloomberg Online Assessment 样题
问一个C++的小细节,和leetcode也有关
Tricky Pointer Problems -- Which level are you?
google电话面试
相关话题的讨论汇总
话题: derived话题: class话题: base话题: void话题: virtual
进入JobHunting版参与讨论
1 (共1页)
r******l
发帖数: 10760
1
(CS版人气太差,发到这里请教一下各位高手)
如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
否被重载呢?
d**********x
发帖数: 4083
2
没看懂。
如果你需要这样别扭的方案,往往是设计缺陷。

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

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

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

k****e
发帖数: 116
4
virtual function只能被derived class redefine吧
一个class的用户怎么能可以overload这个class的member function呢?

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

r******l
发帖数: 10760
5
哦,我对这些名词可能用的不准确。我就是想知道是否被derived class redefine过。
有没有方法可以做到?

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

k****e
发帖数: 116
6
不知道RTTI是否可以做到

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

r*******e
发帖数: 7583
7
http://stackoverflow.com/questions/4741271/ways-to-detect-wheth

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

d**********x
发帖数: 4083
8
既然这样,lz需要一些相对复杂的解决方案。。。

情况
数是

【在 r*******e 的大作中提到】
: http://stackoverflow.com/questions/4741271/ways-to-detect-wheth
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 的大作中提到】
: 假设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();
: }
: };

相关主题
给大家列几个C++的盲点
一般电面C++会问到什么专业问题?
问个超级小问题
Bloomberg Online Assessment 样题
进入JobHunting版参与讨论
i***c
发帖数: 26
11
内联汇编?或者写一个函数,强迫用户在重载之前调用他。

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

A*******t
发帖数: 443
12
类里面写virture somefunc() = 0;

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

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

【在 a*********0 的大作中提到】
: 如果重载的函数里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 的大作中提到】
: 假设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 的大作中提到】
: 你这个大概跟我要的相反。我要的是当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 的大作中提到】
: 我的意思是这样
: 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 的大作中提到】
: (CS版人气太差,发到这里请教一下各位高手)
: 如果一个虚函数被用户重载了,我就做一些很费时间的事。但是这个虚函数大部分情况
: 下不会被用户重载,也就是说大部分用户不会用到这个函数。能否有方法检测该函数是
: 否被重载呢?

1 (共1页)
进入JobHunting版参与讨论
相关主题
google电话面试
请教一题,求两个不等长的有序数组的median
google过了hiring committee, 有被vp review以后据了的么。。
stl map的一道面试题,求助求助
问一个smart pointer的问题
memory leaking问题都从那些方面入手查找原因?
java 接口中的方法 疑惑
BB 面经
一个新鲜twitter面经
Caeercup150 原题:Find a line passes most points
相关话题的讨论汇总
话题: derived话题: class话题: base话题: void话题: virtual