gpt4 book ai didi

c++ - 模板类以及非或空模板版本

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:46 25 4
gpt4 key购买 nike

我正在尝试设计一个 worker 和一个 task 类,但在正确设计时遇到了一些问题。我实现的基本设计是

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 作为参数传递给方法。

最佳答案

你是对的,void 不能“作为参数传递”。但是,在您的情况下,您传递了一个指向 T 的指针作为参数,因此它将是 void*,这是一个有效的参数类型。但是,如果没有结果对象,那么使用一个将 void-pointer 指向空指针的方法仍然没有多大意义。所以你可以专门为 void 模板并摆脱这种情况的方法,例如像这样:

template<typename T>
class Task : public TaskBase {
void SetResult(T* result);
// other methods
};

template <>
class Task<void> : public TaskBase {
//only the other methods
};

请注意,您将难以尝试实现同名的模板类任务和非模板类。编译器将无法区分这些名称。

关于c++ - 模板类以及非或空模板版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24486493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com