最小的例子:
class Task
{
public:
template<typename T, typename... Args>
static T* make(Args... args) {
return new T(args...);
}
}
template<typename A, typename B, typename C>
class MyTask : public Task
{
public:
MyTask(A a, B b, C c)
{
}
}
工厂方法的make
存在使我不必在实例化模板化派生类时提供所有模板类型。
我希望能够尽可能简洁地创建 MyTask 的实例,即:
auto my_task = MyTask::make(a, b, c);
但是,编译器坚持认为它不能推导出 T,而是想要:
auto my_task = MyTask::make<MyTask<A, B, C>>(a, b, c);
这不是一个巨大的交易破坏者,但重复似乎是不必要的。有没有办法按照我想要的方式得到它?