如何将 typename 变量参数转换为字符串
How do I cast a typename variable parameter as a string
问题:如果数组是整数、双精度、浮点数等,我正在尝试创建一个能够找到最大数的函数。如果给定的数组是字符串,它 returns 中的字符串字母最多的字符串。但是,我不知道如何将 list [0] 和 list[i] 转换为字符串。
#include <isostream>
#include <algorithm>
using namespace std;
unsigned int strlength(string word) {
char *ch = &word[0];
unsigned int count = 0;
while (*ch != '[=10=]') {
count++;
ch++;
}
return *count;
}
template<typename U>
U maxNumber(U list[], int size) {
unsigned int i;
if (typeid(list) == typeid(string*)) {
unsigned int i;
for (i = 0; i < size; i++) {
if (strlength(list[0]) < strlength(list[i])) {
list[0] = list[i];
}
else {
list[0] = list[0];
}
}
return list[0];
}
else {
for (i = 0; i < size; i++) {
if (list[0] < list[i]) {
list[0] = list[i];
}
else {
continue;
}
}
return list[0];
}
}
if (typeid(list) == typeid(string*))
是错误的工具。
你需要编译时分支,
与if constexpr
template<typename U>
U maxNumber(U list[], int size) {
if constexpr (std::is_same_v<U, std::string>) {
auto less_by_size = [](const auto& lhs, const auto rhs){
return lhs.size() < rhs.size(); };
return *std::max_element(list, list + size, less_by_size);
} else {
return *std::max_element(list, list + size);
}
}
或通过overload/tag调度
std::string maxNumber(std::string list[], int size) {
auto less_by_size = [](const auto& lhs, const auto rhs){
return lhs.size() < rhs.size(); };
return *std::max_element(list, list + size, less_by_size);
}
template<typename U>
U maxNumber(U list[], int size) {
return *std::max_element(list, list + size);
}
问题:如果数组是整数、双精度、浮点数等,我正在尝试创建一个能够找到最大数的函数。如果给定的数组是字符串,它 returns 中的字符串字母最多的字符串。但是,我不知道如何将 list [0] 和 list[i] 转换为字符串。
#include <isostream>
#include <algorithm>
using namespace std;
unsigned int strlength(string word) {
char *ch = &word[0];
unsigned int count = 0;
while (*ch != '[=10=]') {
count++;
ch++;
}
return *count;
}
template<typename U>
U maxNumber(U list[], int size) {
unsigned int i;
if (typeid(list) == typeid(string*)) {
unsigned int i;
for (i = 0; i < size; i++) {
if (strlength(list[0]) < strlength(list[i])) {
list[0] = list[i];
}
else {
list[0] = list[0];
}
}
return list[0];
}
else {
for (i = 0; i < size; i++) {
if (list[0] < list[i]) {
list[0] = list[i];
}
else {
continue;
}
}
return list[0];
}
}
if (typeid(list) == typeid(string*))
是错误的工具。
你需要编译时分支,
与
if constexpr
template<typename U> U maxNumber(U list[], int size) { if constexpr (std::is_same_v<U, std::string>) { auto less_by_size = [](const auto& lhs, const auto rhs){ return lhs.size() < rhs.size(); }; return *std::max_element(list, list + size, less_by_size); } else { return *std::max_element(list, list + size); } }
或通过overload/tag调度
std::string maxNumber(std::string list[], int size) { auto less_by_size = [](const auto& lhs, const auto rhs){ return lhs.size() < rhs.size(); }; return *std::max_element(list, list + size, less_by_size); } template<typename U> U maxNumber(U list[], int size) { return *std::max_element(list, list + size); }