Kev*_*vin 4 c++ factory ternary-operator visual-studio-2010
我正在使用Visual Studio 2010并且有工厂用于创建抽象基类的两个实现之一.工厂Create方法接受bool标志并返回shared_ptr中的两个impl之一.使用if语句对我来说很好,但是当我尝试使用带有make_shared调用的三元组时,编译器会抱怨.
class Base {
public:
Base() {};
};
class Foo : public Base {
public:
Foo() {};
};
class Bar : public Base {
public:
Bar() {};
};
class Factory {
public:
static std::shared_ptr<Base> Create(bool isFoo) {
return isFoo ?
std::make_shared<Foo>() :
std::make_shared<Bar>();
}
};
int main() {
std::shared_ptr<Base> instance = Factory::Create(true);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
VS给出的错误是'没有可以执行此转换的用户定义转换运算符,或者运算符不能被调用c:\ path\file.h(78):错误C2668:'std :: tr1 :: shared_ptr <_Ty> :: shared_ptr':使用[_Ty = Base]对重载函数进行模糊调用
注意
static std::shared_ptr<Base> Create(bool isFoo) {
if (isFoo)
return std::make_shared<Foo>();
return std::make_shared<Bar>();
}
Run Code Online (Sandbox Code Playgroud)
编译得很好.
这是因为三元运算中的第二个和第三个表达式必须可以相互转换.在你的情况下std::shared_ptr<Foo>根本不可转换std::shared_ptr<Bar>,反之亦然.
虽然它们都可以转换为std::shared_ptr<Base>它们,但它们不能相互转换.
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |