我正在尝试设计一个工作者和一个任务类,并且在纠正它时遇到了一些麻烦。我实施的基本设计是
class Result{
void isComplete()
void cancel()
...
}
class Task{
Result Submit()
...
}
我想创建一个这样的版本,我也可以在结果中返回一个对象。像这样,
template<typename T>
class Result : Result{
T* GetResult();
}
template<typename T>
class Task : Task {
void SetResult(T* result);
}
实现这一目标的最佳方法是什么?我正在考虑使用void作为默认参数创建一个类,但我不确定void是否可以作为参数传递给方法。
答案 0 :(得分:1)
你是对的,void
不能“作为参数传递”。但是,在您的情况下,您将指向T
的指针作为参数传递,因此它将是void*
,这是一个有效的参数类型。但是如果没有结果对象,那么将一个void指针指向任何东西的方法仍然没有多大意义。因此,您可以专门设计void
的模板,并删除该案例的方法,例如:像这样:
template<typename T>
class Task : public TaskBase {
void SetResult(T* result);
// other methods
};
template <>
class Task<void> : public TaskBase {
//only the other methods
};
请注意,您将难以尝试实现模板类Task和具有相同名称的nontemplate类。编译器将无法区分这些名称。