作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个 std::any
对象可能包含也可能不包含指向给定基类的某个派生类的指针 B
.有什么办法可以做到:
B *
,如果 std::any
对象包含可转换为 B *
的东西, 或 dynamic_cast
和
std::any_cast
每个都提供此功能的一半,但我看不出有任何方法可以将两者放在一起。
B *
的每种类型。 ,但这是所有 DRY 违规的根源。
std::vector<std::any> setupTools(const std::string & confFile)
{
std::vector<std::any> myTools;
auto conf = parse(confFile);
for(std::string & wrenchInfo : conf["Wrenches"])
{
Wrench::setup(myTools, wrenchInfo);
}
for(std::string & hammerInfo : conf["Hammers"])
{
Hammer::setup(myTools, hammerInfo);
}
// 25 more kinds of tools
}
Factory1::init(const std::vector<std::any> & tools)
{
m_wrench = any_get<Wrench *>(tools);
m_hammer = any_get<Hammer *>(tools);
m_saw = any_get<Saw *>(tools);
}
Factory2::init(const std::vector<std::any> & tools)
{
m_wrench = any_get<TorqueWrench *>(tools);
}
Factory3::init(const std::vector<std::any> & tools)
{
m_saw = any_get<CordlessReciprocatingSaw *>(tools);
}
Saw
-- 用于
Factory1
.
最佳答案
这是无法实现的。只能从 std::any
中取出对象完全使用放入其中的类型。因此,您必须知道类型才能从中获取任何信息。
看来std::any
不适合您的用例。
关于c++ - 有没有办法在不知道派生类型的情况下将包含派生指针的 std::any 强制转换为基指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58718012/
我是一名优秀的程序员,十分优秀!