返回不同的类型
Returning different types
如何(在运行时)决定从函数返回哪种类型
这可能吗
我想是的,但人们永远无法确定。
如果可以选择使用Boost,请考虑使用Boost.Variant。
你可以把变体想象成类固醇上的union
。它适用于大多数C++类型,并允许编译时和运行时多态性,但它不需要类型的公共基类。主要的缺点是它涉及大量的模板元编程,因此会给编译器带来一些负载。
这里有一个简短的例子来获得这个想法:
typedef boost::variant<float, std::string> MyVariant;
MyVariant GetInt() { return MyVariant(42); }
MyVariant GetString() { return MyVariant("foo"); }
MyVariant v;
//run-time polymorphism:
int number = boost::get<int>(v); // this line may throw (basically a dynamic_cast)
//compile time polymorphism:
boost::apply_visitor(Visitor(), v);
// where Visitor is a functor overloading operator() for *all* types in the variant
一个更轻量级的替代方案是Boost。任何,请参阅此页面进行比较。
使用多态性
public interface MyType {
public void doSomething();
}
public class A implements MyType {
public void doSomething(){}
}
public class B implements MyType {
public void doSomething(){}
}
public class MyClass {
public MyType getData(){
if ( /* some condition */ ){ return new A(); }
return new B();
}
public void test(){
MyType o = this.getData();
o.doSomething();
}
}
则简单地返回类型为CCD_ 2并直接在该对象上调用CCD_;即您不需要知道返回的类型是A
还是B
。您所关心的只是它实现了doSomething
。这就是多态性的美妙之处,即不再有丑陋的is
、getType
、instanceOf
(Java)等。
相关文章:
- 如何在模板参数中分离函数类型返回类型和参数
- 为什么要为指针返回类型返回一系列字符?
- 有没有办法根据运行时值的类型返回 constexpr 对象
- 从弱指针返回类型返回共享指针
- 无法为unique_ptr返回类型返回 nullptr
- 为什么双重类型返回无穷大
- std::is_arithmetic 为通用 lambda 中的 int 类型返回 false:未定义的行为?
- C 策略设计具有可变类型返回值
- 根据类型返回一个值
- 在C++中,将double转换为long的类型返回了不正确的值
- 作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id
- 具有引用类型返回的函数
- C++ 如何使模板<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr
- C++模板:按类型返回值
- 以Integer返回类型返回浮点值
- 使用 C++14 的自动功能类型返回扣除代替 std::common_type 是否始终安全?
- 为什么允许新运算符向每个指针类型返回*void
- 适当的函数返回类型返回日期时间
- c++中布尔类型返回函数的默认返回值
- 在c#中使用非托管c++代码对所有double类型返回0