template<class FTask, typename ReturnType = void>
时间: 2024-09-09 15:17:37 浏览: 57
`template<class FTask, typename ReturnType = void>` 是C++中的模板声明,用于创建一个模板类或模板函数。模板是一种泛型编程技术,使得程序员能够编写与数据类型无关的代码,从而增强代码的复用性。
在这个模板声明中,`FTask` 表示模板参数列表中的一个类型参数,它可以是一个函数指针类型、一个函数对象(functor)类型、一个lambda表达式类型,或者任何可以被调用的对象类型。`ReturnType` 是模板的第二个参数,它具有一个默认值 `void`。如果在实例化模板时没有明确指定 `ReturnType` 的类型,那么 `ReturnType` 将默认为 `void`。如果指定了,那么 `ReturnType` 将是其他类型,表示函数调用后返回值的类型。
例如,你可以使用这个模板来创建一个能够接受不同类型函数和返回值的模板类或模板函数。下面是一个简单的例子,使用这个模板声明来创建一个模板函数,该函数接受一个函数对象作为参数,并返回该函数对象的调用结果:
```cpp
#include <iostream>
#include <functional>
template<class FTask, typename ReturnType = void>
ReturnType ExecuteTask(FTask task) {
if constexpr (std::is_same<ReturnType, void>::value) {
task();
} else {
return task();
}
}
int main() {
// 使用lambda表达式,指定返回值类型为int
auto result = ExecuteTask<int>([]() -> int { return 42; });
std::cout << "The answer is " << result << std::endl;
// 不指定返回值类型,使用默认的void
ExecuteTask([]() { std::cout << "Hello, World!" << std::endl; });
return 0;
}
```
在这个例子中,`ExecuteTask` 是一个模板函数,它接受一个函数对象 `task`。你可以根据需要指定返回值类型(在这个例子中是 `int`),或者让模板自动推导使用默认的 `void` 类型。
阅读全文