首页 > 其他分享 >判断类中是否有虚函数

判断类中是否有虚函数

时间:2024-07-26 16:06:46浏览次数:13  
标签:判断 函数 reinterpret member cast bool int64 include 类中

#include<iostream>
#include<string>
#include <stack>
using namespace std;

#include <iostream>
#include <type_traits>

template<typename T>
struct HasVirtual : public T
{
    bool hasVirtualFlag;
    bool operator() () const  {
        return (int64_t)(reinterpret_cast<void*>(const_cast<bool*>(&this->hasVirtualFlag))) == 
        (int64_t)reinterpret_cast<void*>(const_cast<HasVirtual<T>*>(this)) + sizeof(T);
    }
};

class A {
public:
    bool first_member;
    virtual void func() {};
    ~A() {}  // A 有虚析构函数
};

class B {
public:
    bool first_member;
    ~B() {}  // B 没有虚析构函数
};

int main() {
    // B b; A a;
    // std::cout << "A" <<  (int64_t(reinterpret_cast<void*>(&a)) == int64_t(reinterpret_cast<void*>(&a.first_member))) << endl ;
    // std::cout << "A" <<  (int64_t(reinterpret_cast<void*>(&b)) == int64_t(reinterpret_cast<void*>(&b.first_member)))  << endl; ;
    HasVirtual<A>   a;
    HasVirtual<B>   b;
    cout << "A" << a() << endl;
    cout << "B" << b() << endl;
    return 0;
}

 

标签:判断,函数,reinterpret,member,cast,bool,int64,include,类中
From: https://www.cnblogs.com/micoblog/p/18325581

相关文章

  • 使用 useRequestURL 组合函数访问请求URL
    title:使用useRequestURL组合函数访问请求URLdate:2024/7/26updated:2024/7/26author:cmdragonexcerpt:摘要:本文介绍了Nuxt3中的useRequestURL组合函数,用于在服务器端和客户端环境中获取当前页面的URL信息。通过示例展示了如何在页面中使用此函数获取并显示URL及其......
  • python基础函数
    1.为什么使用函数使用函数的目的是去减少代码的冗余性,简化代码的复杂度2.如何去定义一个函数以def开头去进行相关的定义在def的后面我们就去以见明知意的方式去定义一个函数的名称在函数名称后面的括号中去添加参数值,可以是多个参数,也可以是无餐的3.函数的调用无参多......
  • 函数模板重载和实例化例题
    //CPPTest.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<fstream>#include<iostream>#include<string>#include<cstring>#include<cmath>usingnamespacestd;template<classT>Tmaxn(T*arr,intn){ Tmax......
  • 记一种Oracle中行转列PIVOT函数的替换方案
    在实际工作中,开发可能会碰到数据需要进行行转列的查询,第一个想到的就是用Oracle的内置函数PIVOT,但PL可能会说,这种查询的性能可能会不太好,项目上要求不使用这个函数,那么有什么方法实现这种查询呢?方案:使用同一张表的row_id来进行关联查询,因为Oracle中表数据的row_id是唯......
  • FlinkSQL窗口函数TUMBLE、SESSION 和 HOP的区别
    目录TUMBLE滚动窗口(TumblingWindow)SESSION会话窗口(SessionWindow)HOP滑动窗口(HoppingWindow)小结HOP窗口为什么不需要rowtime(事件时间) PROCTIME()vsrow_time 为什么HOP窗口常用PROCTIME()?总结TUMBLE、SESSION可以使用处理时间嘛TUMBLE窗口(滚动窗口)SESS......
  • 如果查询不在构造函数中,为什么 Sqlalchemy 会清理查询结果?
    我创建了一个类Result,它接受sqlalchemy语句,存储该语句,执行该语句,并存储执行结果。如果直接在__init__()中执行该语句,下面的脚本将产生预期的结果:1TestJE12TestJE2但是如果该语句在set_result()中执行,下面的脚本输出Nores......
  • C++ primer plus 第16章string 类和标准模板库, 函数符概念
    C++primerplus第16章string类和标准模板库,函数符概念C++primerplus第16章string类和标准模板库,函数符概念文章目录C++primerplus第16章string类和标准模板库,函数符概念16.5.1函数符概念程序清单16.15functor.cpp16.5.1函数符概念正如STL定......
  • C++ primer plus 第16章string 类和标准模板库, 函数对象
    C++primerplus第16章string类和标准模板库,函数对象C++primerplus第16章string类和标准模板库,函数对象文章目录C++primerplus第16章string类和标准模板库,函数对象16.5函数对象16.5函数对象很多STL算法都使用函数对象–也叫函数符(fiunctor)。......
  • Web应用课 3.3 JavaScript——对象、数组、函数、类、事件
    对象英文名称:Object。类似于C++中的map,由key:value对构成。value可以是变量、数组、对象、函数等。函数定义中的this用来引用该函数的“拥有者”。eg.letperson={name:'zjq',age:18,money:100,friends:['yxc','Bob','Lucy'],//对象成员可以是数......
  • 什么是面向对象,js如何创建对象和工厂函数
    面向对象编程(Object-OrientedProgramming,简称OOP)是一种编程范式,它使用“对象”来设计软件。对象可以包含数据(属性)和代码(方法),这些代码可以操作这些数据。面向对象编程的基本概念包括:封装:把数据(属性)和行为(方法)组合在一起,隐藏内部状态和实现细节。继承:允许新创建的类(子类)继......