我有许多类,它们采用未指定类型的对象并返回具有固定类型的结果。另外,这些对象是模板化的,它们改变了结果的计算。我想将这些对象隐藏在一个通用接口后面。下面的例子应该说清楚。 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;
}
答案 0 :(得分:0)
我真的不明白这个问题是什么。
代码编译。
你不想要多态,但
我建议只从界面中取出参数。键入擦除的最简单方法是使用std::function<Result()>
并完成。
如果需要,我可以添加一个小样本。