gpt4 book ai didi

c++ - 以数组为参数的模板特化

转载 作者:行者123 更新时间:2023-11-30 02:17:00 25 4
gpt4 key购买 nike

我正在尝试专门化此函数模板:

template< typename T, std::size_t Size>
T Max(T(&pArr)[Size]) {
T result{ *pArr };

for (size_t i{ 1 }; i < Size; i++) {
result = pArr[i - 1] > pArr[i] ? pArr[i - 1] : pArr[i];
}
return result;
}

我想专门针对 const char*。我尝试了很多东西,但其中任何一个都有效。尝试这种方式时:

template<std::size_t SIZE>
const char* Max<const char*>(const char *(&pArr)[SIZE]) {
char result{ *pArr };

for (size_t i{ 1 }; i < SIZE; i++) {
result = pArr[i - 1] > pArr[i] ? pArr[i - 1] : pArr[i];
}
return result;
}

我收到错误:“Max”:非法使用显式模板参数。有人可以帮我吗?我想了解为什么它不起作用以及如何使其起作用。

谢谢!

最佳答案

你不能偏特化一个函数。但是您不必这样做,因为函数已经支持重载。您只需为 const char* 创建一个重载.您的版本有两个错误。

  1. 您已将结果变量声明为char但应该是const char* .
  2. 使用 > 比较随机指针, 没有给出有意义的结果。你必须决定如何称呼一个比另一个大。

链接:https://gcc.godbolt.org/z/VKE4Jy


#include<cstring>

template< typename T, std::size_t Size>
T Max(T(&pArr)[Size]) {
T result{ *pArr };

for (size_t i{ 1 }; i < Size; i++) {
result = pArr[i - 1] > pArr[i] ? pArr[i - 1] : pArr[i];
}
return result;
}

bool greater(const char* first, const char* second){
return strlen(first) > strlen(second);
}

template<std::size_t SIZE>
const char* Max(const char *(&pArr)[SIZE]) {
const char* result{ *pArr };

for (size_t i{ 1 }; i < SIZE; i++) {
result = greater(pArr[i - 1],pArr[i]) ? pArr[i - 1] : pArr[i];
}
return result;
}

int foo() {
int ints[] = {1, 2};
return Max(ints);
}

const char* bar() {
const char* stuff[] = {"1222", "234", "sfsdfsd"};
return Max(stuff);
}

关于c++ - 以数组为参数的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com