下节课:
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 ( 对于函数式转换