C++ 混合虚拟继承和模板专门化

C++ 混合虚拟继承和模板专门化,c++,inheritance,polymorphism,template-specialization,virtual-functions,C++,Inheritance,Polymorphism,Template Specialization,Virtual Functions,我正在尝试编写一个小的反序列化模块,根据静态类型将字符串解码为bool/integers/enum/strings,这样我就可以按照 enum E { zero, one, two }; struct X { deser<bool> a; deser<signed> b; deser<E> c; deser<std::string> d; deser_list_t desers; X()

我正在尝试编写一个小的反序列化模块,根据静态类型将字符串解码为bool/integers/enum/strings,这样我就可以按照

enum E { zero, one, two };

struct X {
    deser<bool> a;
    deser<signed> b;
    deser<E> c;
    deser<std::string> d;
    deser_list_t desers;

    X() 
        : a(false, std::vector<std::string>{ "yes", "true" }, std::vector<std::string>{ "no", "false" })
        , b(-1), c(zero), d()
    { 
        desers.add("a", a).add("b", b).add("c", c).add("d", d); // by refs?..
    }

    void deserialize(const std::map<std::string, std::string>& many_data) {
        desers.process(many_data);
        if (!d.is_there()) { throw chair_t(); }
    }
};
我尝试了什么:用纯虚拟bool parseconst std::string&value声明一个非模板类deser_基,用dest default_值构造函数声明一个派生模板类deser-现在我必须以某种方式将其专门化为bools/整数/枚举/字符串

这就是我不知道如何做的:bool专门化需要两个额外的成员和一个特殊的构造函数,std::string专门化不需要默认值


我是否应该从desr\u基派生出desr\u bool、desr\u number等,然后将desr作为它们的包装器?

专门化可以有任何您喜欢的成员-我不知道问题出在哪里。@KerrekSB他们也没有来自泛型声明的任何成员,似乎:我在desr中声明的任何成员在desr中都不可用。不,当然不是。模板专门化是一个完全独立的类。所有这些都应该写在你的课本上…?很明显你做错了,我们在这里看不到。模板专门化,我相信您已经知道,它只是定义特定数据类型的行为。@KerrekSB是的,我的教科书中说过,但是。。。好在deser中仍然有一些事情对于每个T专门化都是以相同的方式完成的,但是我不能将它们放入deser_库中-它不是模板化的。另外,我还想知道,专门化枚举的实际方法是什么?正在写入模板文件{…};不太管用