c++ - 从模板类调用方法的问题

标签 c++

我有一个这样的模板类方法:

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/

相关文章:

c++ - 在 unordered_set 中插入一个新元素 : should the hint be end()?

c++ - C++中的十六进制字符串算术

c++ - 如何创建没有透明内容的完全透明窗口?

c++ - 左值和右值分配错误

c++ - 渲染多个对象时opengl闪烁

c++ - 如何使用fstream从txt文件中获取数据

c++ - 访问类函数时出现奇怪的错误

c++ - GoLang 将 C.wchar_t 转为字符串

c++ - int vector 可以创建的最大整数项数

c++ - googlemock 框架不适用于虚拟继承