【发布时间】:2021-07-19 11:06:35
【问题描述】:
抱歉,如果标题具有误导性或笼统。我真的不知道还有什么可以命名的标题。我创建了一个函数,可以将任何类型的向量转换为字符串。我有 template<typename K> 前面的函数代码,它用作向量类型的占位符。我的主要问题是用于检查向量类型的 if 语句中的嵌套 switch 语句。即使 if 语句检查失败,代码仍然会出现此错误:a switch expression of type 'float' is not valid。例如,如果我在 main 中声明了一个 float 类型的向量,那么我使用该函数将向量转换为字符串,它会给我两个错误。一个用于嵌套在int 检查内的switch 语句,另一个用于嵌套在char 检查内的switch 语句。这是非常令人沮丧的,因为如果由于向量不是int 或char 而导致检查失败。此外,它们也不能同时是int 和char!我一直在尝试剖析我的代码并解决这个问题,但我没有找到解决方案。也许是因为我不熟悉模板和 std::is_same 函数。
这是我的头文件代码(有点长):
#include <string>
#include <vector>
//Converts a vector of any type into a string like this: 2, 5, 6, 3, (Yes the comma stays at the end like that. That can be fixed but it will require huge amounts of code)
template<typename K>
std::string convertToString(std::vector<K>& V) {
std::string result_str{""};
for (auto s : V) {
if (std::is_same<K, bool>::value) {
if (s == true) {
result_str += "true, ";
}
else if (s == false) {
result_str += "false, ";
}
}
else if (std::is_same<K, int>::value) {
switch (s) {
case 1:
result_str += "1, ";
break;
case 2:
result_str += "2, ";
break;
case 3:
result_str += "3, ";
break;
case 4:
result_str += "4, ";
break;
case 5:
result_str += "5, ";
break;
case 6:
result_str += "6, ";
break;
case 7:
result_str += "7, ";
break;
case 8:
result_str += "8, ";
break;
case 9:
result_str += "9, ";
break;
default:
result_str += "Not a digit, ";
}
}
else if (std::is_same<K, float>::value) {
//Because switch statements cannot take floating point values (For some reason I thought this would fix my problem but it didn't)
if (s == 1) {
result_str += "1, ";
}
else if (s == 2) {
result_str += "2, ";
}
else if (s == 3) {
result_str += "3, ";
}
else if (s == 4) {
result_str += "4, ";
}
else if (s == 5) {
result_str += "5, ";
}
else if (s == 6) {
result_str += "6, ";
}
else if (s == 7) {
result_str += "7, ";
}
else if (s == 8) {
result_str += "8, ";
}
else if (s == 9) {
result_str += "9, ";
}
else {
result_str += "., ";
}
}
else if (std::is_same<K, char>::value) {
switch (s)
{
case 'a':
result_str += "a, ";
break;
case 'A':
result_str += "A, ";
break;
case 'b':
result_str += "b, ";
break;
case 'B':
result_str += "B, ";
break;
case 'c':
result_str += "c, ";
break;
case 'C':
result_str += "C, ";
break;
case 'd':
result_str += "d, ";
break;
case 'D':
result_str += "D, ";
break;
case 'e':
result_str += "e, ";
break;
case 'E':
result_str += "E, ";
break;
case 'f':
result_str += "f, ";
break;
case 'F':
result_str += "F, ";
break;
case 'g':
result_str += "g, ";
break;
case 'G':
result_str += "G, ";
break;
case 'h':
result_str += "h, ";
break;
case 'H':
result_str += "H, ";
break;
case 'i':
result_str += "i, ";
break;
case 'I':
result_str += "I, ";
break;
case 'j':
result_str += "j, ";
break;
case 'J':
result_str += "J, ";
break;
case 'k':
result_str += "k, ";
break;
case 'K':
result_str += "K, ";
break;
case 'l':
result_str += "l, ";
break;
case 'L':
result_str += "L, ";
break;
case 'm':
result_str += "m, ";
break;
case 'M':
result_str += "M, ";
break;
case 'n':
result_str += "n, ";
break;
case 'N':
result_str += "N, ";
break;
case 'o':
result_str += "o, ";
break;
case 'O':
result_str += "O, ";
break;
case 'p':
result_str += "p, ";
break;
case 'P':
result_str += "P, ";
break;
case 'q':
result_str += "q, ";
break;
case 'Q':
result_str += "Q, ";
break;
case 'r':
result_str += "r, ";
break;
case 'R':
result_str += "R, ";
break;
case 's':
result_str += "s, ";
break;
case 'S':
result_str += "S, ";
break;
case 't':
result_str += "t, ";
break;
case 'T':
result_str += "T, ";
break;
case 'u':
result_str += "u, ";
break;
case 'U':
result_str += "U, ";
break;
case 'v':
result_str += "v, ";
break;
case 'V':
result_str += "V, ";
break;
case 'w':
result_str += "w, ";
break;
case 'W':
result_str += "W, ";
break;
case 'x':
result_str += "x, ";
break;
case 'X':
result_str += "X, ";
break;
case 'y':
result_str += "y, ";
break;
case 'Y':
result_str += "Y, ";
break;
case 'z':
result_str += "z, ";
break;
case 'Z':
result_str += "Z, ";
break;
}
}
}
return result_str;
}
这是我的 cpp 文件代码:
#include "Helper.h"
#include <iostream>
std::vector<float> nums{ 2.4, 65.2, 56.3, 4.6 };
int main() {
std::cout << convertToString(nums);
}
【问题讨论】:
标签: c++ if-statement templates vector types