从模板类调用方法的问题

时间:2012-06-18 04:46:06

标签: c++

我有一个类似的模板类方法:

template<class T>
static tmpClass<T>* MakeInstance(T value)
{

  tmpClass<T> *pointer = new tmpClass<T>(value);

  return pointer;
}

我用各种方法调用这个方法:

方式1:

MakeInstance<int>(val); // This is OK.

方式2:

MakeInstance(int val); // ERROR: Expected '(' for function-style cast or type construction

方式3:

MakeInstance(int (val)); // This is also OK.

方式4:

MakeInstance(int, (val)); // The same issue with way 2

方式5:

MakeInstance((int), (val)); // ERROR: Expect expression with ","

方式6:

MakeInstance((int) val); // This is also OK.

方式7:

MakeInstance<int val>; // ERROR: Expected ">"

那么1,3,6之间有什么区别吗?为什么我们不能用“,”来分割“T”和“价值”,只是因为我们必须严格遵循模板?但为什么我们也可以在“&lt;&gt;”中使用“T”?

1 个答案:

答案 0 :(得分:1)

#1 明确指定 ,您要调用指定类型的模板函数。

#3&amp; #6要调用的函数由 函数模板参数推导 确定。该转换告诉编译器查找一个带int的函数,因为编译器无法找到它使用模板函数生成一个函数。

请注意c风格的演员阵容:

T(val);

val(T);

两者相同且意思相同。