带指针的 C++ 模板 - 无法转换模板参数

标签 c++ templates

我正在尝试实现一个模板

template <class object_t, long size, object_t nullObject>
class lf_deque
{
  // ...
}

当我尝试使用 int 实例化此模板时,它编译正常,但如果我尝试使用指针实例化,则会出现错误:

could not convert template argument '0' to 'int*'

lf_deque<int,  10, 0> intDeque; // WORKS
lf_deque<int*, 10, 0> ptrDeque; // ERROR

为什么我会得到这种不一致的任何想法或想法?

最佳答案

在使用ADL(Argument Dependent Lookup) Function Template Argument Deduction解析函数/类的模板中,没有隐式转换。只有完全匹配的参数才能解析以实例化适当的模板函数/类。这就是错误的根本原因。

编译器告诉您它不能将最后一个参数 0 隐式转换为 int *,因为当您将第一个参数作为 int * 传递时, object_tint * 并且编译器也期望 int * 作为第三个参数。它告诉您 0 是类模板的第三个参数的无效类型。

关于带指针的 C++ 模板 - 无法转换模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098858/

相关文章:

c++ - 通过包含模板的继承链的 static_cast 将无法编译

c++ - Opencv + Visual Studio 2008 奇怪的调试问题

c++ - Win32 "move"能否堆分配内存?

c++ - 将 Char 指针中的十六进制转换为十进制

c++ - 在模板虚类层次结构中调用基类方法

C++编译时检查模板类型中是否存在方法

c++ - 为什么 SFINAE 在这种情况下对我来说工作不正确以及如何解决它?

c++ - 在模板类中使用 lambda

c++ - 如何遍历 STL 映射(找到所有可能的对)

php - 银条3.1 : Link to page of data object from inside loop