问题描述
我有一个类的方法(在下面的示例中,bar
中的app
)。我想让方法自动调用,我的意思是没有条件语句(如if
,重载函数(示例中为create
)。
在编译时无法知道要调用哪个函数,因为该函数依赖于硬件输入(本示例中为用户输入)。
在我的示例中,无法更改基类b
以及派生类d1
和d2
。在实际代码的上下文中,它们基本上是硬件驱动程序的一部分。
#include <iostream>
class b
{
virtual void foo() = 0;
};
class d1 : public b
{
void foo() override {};
};
class d2 : public b
{
void foo() override {};
};
class app
{
int create(d1 & p1){return 1;}
int create(d2 & p2){return 2;}
public:
app()
{
}
void bar(b * p)
{
::std::cout<<this->create(*p)<<::std::endl;
}
};
int main()
{
b * either1or2;
auto input(0);
::std::cin>>input;
if(input % 2 == 0)
{
either1or2 = new d1;
}
else
{
either1or2 = new d2;
}
app a;
a.bar(either1or2);
return 0;
}
我写的东西是错误的,因为它在编译时需要知识。
::std::cout<<this->create(*p)<<::std::endl;
应该更像是
::std::cout<<this->create(*dynamic_cast< decltype(*p) * >(p))<<::std::endl;
但是会出现同样的问题,因为在编译时评估了decltype。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)