c++ - C++ 类型推断
问题描述
class Animal { public: virtual void say() const { std::cout << "mew ?\n"; } };
class Lion : public Animal { public: virtual void say() const { std::cout << "roar !\n"; } };
class Autobus { public: virtual void say() const { std::cout << "vroum !\n"; } };
// 1 client acting on these classes
struct PetSomething {
void operator()(const Animal& a) { cout << "It says "; a.say(); }
void operator()(const Autobus& a) { cout << "It makes "; a.say(); }
};
int main(void) {
std::variant<Animal, Autobus> thing; // Declaration of $\textrm{\szif thing}$
thing = Animal();
std::visit(PetSomething{}, thing); // Displays "It says mew ?"
thing = Autobus();
std::visit(PetSomething{}, thing); // Displays "It makes vroum !"
thing = Lion();
std::visit(PetSomething{}, thing); // Displays "It says mew ?"
thing = 666; // Type error
}
我想知道我们在这里使用的是什么类型的多态性,以及为什么我们在这里特别有这种行为:
thing = Lion();
std::visit(PetSomething{}, thing); // Displays "It says mew ?"
解决方案
推荐阅读
- php - 比较失败,大量 PHP
- cron - 多个 cronjobs 可能同时访问日志文件
- java - 可选列表的 Bean 验证
- spring-kafka - Spring Kafka 和 MDC
- android - 添加到文件时数据未显示在 recyclerview 中
- python - 内核 pca 参数用法:内核和 fit_inverse_transform
- javascript - 单击下拉列表 #1 中的值应自动打开下拉列表 #2 并关闭下拉列表 #1
- python - str.format 通过加入列表的值来格式化列表
- talend - 是否可以在 Talend Open Studio 独立作业中提示我输入文件名?
- android - 片段导入类型