我经常发现需要使用以下模式:
template<typename T>
class SomeClass : public Base {
SomeClass(const T& t) {...}
...
};
template<typename T>
SomeClass<T>* makeSomeClass(const T& t) {
return new SomeClass<T>(t);
}并使用它:
Base* = makeSomeClass(123);当我不想显式地指定T时,这是很有用的,因为它是一个非常复杂的(函数类型等),并且函数参数可以隐式推导出类型。
有没有办法在没有额外的"make“函数的情况下做到这一点?为什么模板推导只适用于函数参数,而不适用于构造函数参数?
发布于 2011-06-27 02:16:28
如果构造函数本身是一个模板,那么它可以在构造函数参数中工作。不同之处在于,当您使用帮助器时,您使用的是函数模板,其中编译器可以推断类型。如果没有帮助器,您将使用类模板,在调用(非模板)构造函数之前,编译器必须以某种方式推断类型。
https://stackoverflow.com/questions/6485791
复制相似问题