我有许多类,它们接受一个未指定类型的对象,并返回一个固定类型的结果。此外,这些对象被模板化,这将改变结果的计算。我想把这些对象隐藏在一个公共接口后面。下面的例子应该很清楚。struct Work是接口,并且存在多个类,比如struct WorkImpl。此外,还有多个类型,如struct A和struct B,它们相互作用。在我的例子中,它们也是模板化的,不能是多态的。问题是如何将工作调用“转发”到WorkImpl对象?
#include <iostream>
struct Result
{
};
struct Work
{
virtual ~Work() { }
template <typename U>
// virtual Result work(const U& u) = 0; // this is not possible, of course!
Result work(const U& u) { std::cout << "Work" << std::endl; }
};
struct B
{
};
struct A
{
A& operator =(const B& b) { return *this; }
Result result() { return Result(); }
};
template <typename T>
struct WorkImpl : public Work
{
template <typename U>
Result work(const U& u)
{
std::cout << "WorkImpl" << std::endl;
T t;
t = u;
return t.result();
}
};
int main()
{
Work* w = new WorkImpl<A>();
w->work(B());
return 0;
}发布于 2015-06-26 14:13:07
我不太明白问题是什么。
代码编译。
你不想多态,但是
我建议把参数从界面上拿出来。输入擦除最简单的方法是使用std::function<Result()>并完成。
如果需要的话,我可以添加一个小样本。
https://stackoverflow.com/questions/31075314
复制相似问题