我有一个这样的模板类方法:
template<class T>
static tmpClass<T>* MakeInstance(T value)
{
tmpClass<T> *pointer = new tmpClass<T>(value);
return pointer;
}
并且我使用了多种方式来调用这个方法:
方式一:
MakeInstance<int>(val); // This is OK.
方式二:
MakeInstance(int val); // ERROR: Expected '(' for function-style cast or type construction
方式三:
MakeInstance(int (val)); // This is also OK.
方式四:
MakeInstance(int, (val)); // The same issue with way 2
方式五:
MakeInstance((int), (val)); // ERROR: Expect expression with ","
方式六:
MakeInstance((int) val); // This is also OK.
方式七:
MakeInstance<int val>; // ERROR: Expected ">"
那么方式1,3,6有什么区别吗?为什么我们不能用“,”来拆分“T”和“value”,只是因为我们必须严格遵循模板?但是为什么我们也可以在“<>”中有“T”呢?
最佳答案
在 #1
中,您明确指定您想要调用具有指定类型的模板函数。
在 #3
和 #6
中,要调用的函数由函数模板参数推导决定。转换告诉编译器寻找一个接受 int
的函数,因为编译器找不到它使用模板函数生成一个。
注意 c 风格的转换:
T(val);
和
val(T);
两者相同,意思相同。
关于c++ - 从模板类调用方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11077024/