有关C 模板参数的问题
questions about parameter of template in C++
我已经写了自己的模板功能:
template <typename T, size_t N> T* begin(T (&arr)[N])
{
return arr;
}
当我使用字符串数组来调用时:
string str[] = {"aaa", "bbb", "ccc"};
cout << *begin(str) << endl;
编译器将报告一个错误:
[Error] call of overloaded 'begin(std::__cxx11::string [3])' is ambiguous
[Note] candidate: T* begin(T (&)[N]) [with T = std::__cxx11::basic_string<char>; long long unsigned int N = 3ull]
当我将参数类型更改为const:
时template <typename T, size_t N> T* begin(const T (&arr)[N])
{
return arr;
}
程序m通常进行。它是怎么发生的?但是,当我使用一系列字符再次调用它时,报告了一个新错误:
[Error] invalid conversion from 'const char*' to 'char*' [-fpermissive]
所以,我该如何修复它?谢谢。
您不能具有此功能,因为它具有与std::begin
超载之一相同的名称和签名。幸运的是,它也可以做同样的事情,因此您可以使用std::begin
。
如果由于某种原因需要使用您的功能,则必须给它一个不同的名称,或将其放在自己的名称空间中。
注意,using namespace std
是不是为了找到std::begin
所必需的,因为ADL。
相关文章:
- C++转换参数初始化问题
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 标准::enable_if 和标准::is_arithmetic 作为模板参数的问题
- enable_if中参数包的大小问题
- 构造函数 (C++) 中的 char 指针参数存在问题
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++复杂情况的比较器通过参数问题
- 调试模板时出现问题.专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误构建失败:模板参数 1
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 模板<类型名称...参数>的问题
- C++17 中的歧义错误(模板模板参数和默认参数问题)
- constexpr 运算符重载使用参数的问题
- 通过命令行参数获取llvm ir文件时面临问题
- 函数中使用的函数指针的参数的问题
- 我在生成返回为数不多的模板化参数之一cpp的函数时遇到问题
- 从命令行获取参数时出现问题
- C ++回测问题:如何检查构造函数在假定失败时是否失败(给定输入的无效参数)
- C++:关于for语句和参数的一般问题
- 字符串打印机问题:参数 X 没有从“char (*)[xx]”到“char**”的已知转换