c++ T::BrowserWeb 被解析为非类型,但实例化产生类型

问题描述 投票:0回答:0

下节课:

class Capabilities{
    public:
        enum Type{BrowserWeb, OsWeb};
        virtual ~Capabilities() = default;
        virtual void printCapabilities()=0;
        static Type type;
}

class CapabilitiesFactory{
    public:
        template < typename T>
        std::unique_ptr<Capabilities> createCapabilities(typename T::Type type){
        std::unique_ptr<Capabilities> caps;
        if( type == T::BrowserWeb) {                //<- error 
            caps = std::make_unique<BrowserWeb>();
        }
        if(caps != nullptr) caps->type = type;
            return caps;
        } 

        template<typename T>
        std::unique_ptr<T> create() {
            auto caps = createCapabilities<T>(T::type);
            return std::unique_ptr<T>(dynamic_cast<T*>(caps.release()));
        }
};

class BrowserWeb : public Capabilities{
    public:
        static Type type;
        void printCapabilities() override;
}

main.cpp

auto factory = CapabilitiesFactory();
auto cap = factory.create<BrowserWeb>();

in factory .create an error occure in classFactory if( type == T::BrowserWeb) { error : dependent-name T::BrowserWEb is parsed as a non-type,但实例化产生一个类型

谢谢你的帮助

添加 if( type == typename T::BrowserWeb) { error Except ( 对于函数式转换

c++ templates factory
© www.soinside.com 2019 - 2024. All rights reserved.