我正在尝试实现一个模板
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_t
是 int *
并且编译器也期望 int *
作为第三个参数。它告诉您 0
是类模板的第三个参数的无效类型。
关于带指针的 C++ 模板 - 无法转换模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098858/