当前位置:  开发笔记 > 编程语言 > 正文

检查类是否具有typedef(私有或其他)的特征

如何解决《检查类是否具有typedef(私有或其他)的特征》经验,为你挑选了0个好方法。

有没有办法检查是否classtypedef哪个有效private typedef

以下代码适用于VS2013,但在ideone的gcc上失败

template
struct to_void
{
    typedef void type;
};

class Foo
{
    typedef int TD;
};

template 
struct has_TD : std::false_type {};

template 
struct has_TD::type > : std::true_type{};

int main()
{
    std::cout << std::boolalpha << has_TD::value << std::endl;
}

编辑 - 为什么我想要这个

我有自定义序列化系统,可以序列化任意类型.当它必须表现不同时(例如字符串),它有几个重载.对于其余类型,它只是将值写入内存中.如果我有编写类型,我有时也可以写入内存(保存和加载发生在同一架构上,使用相同的编译器编译,因此填充将是相同的,等等).此方法对于POD类型(std::is_pod特征)有效,但所有POD类型仅是所有类型的子集,支持此序列化.

所以我基本上都有模板化的函数write,它只是写sizeof(T)字节(原始序列化)...但是我不希望这个被错误地调用,我想要用户,在他们的类中明确地说:"这个类/结构可以是原始的序列化过").我这样做的方法是ALLOW_RAW_SERIALIZE定义一些可以通过trait检查的typedef 的宏.如果类MyClass不包含typedef,则调用write(myClassInstance)将产生编译器错误.

基本决定类是否可以原始序列化的东西是它的成员(没有反射,成员不能自动枚举和检查,因此用户必须提供这样的信息).典型的类看起来像这样:

class
  public
    ctor-dtor
    methods
  private
    methods
    members

我希望用户允许写入ALLOW_RAW_SERIALIZE尽可能接近成员,所以当他们更改某些成员时,忘记更新的可能性较小ALLOW_RAW_SERIALIZE(删除它.当它不再有效时)

所以这就是我想检查的原因 private typedef

因为它可以代替反射并采用整体类型并编写它,所以我不会像打破封装那样堕落......

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有