我提供了来自演示的代码,与字体关联的类型是 void *
类型。
这是在vscode中声明的字体类型
#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
Expands to:
(&glutBitmapHelvetica18)
我正在尝试编写一个快速的小条件来检查字体是否来自列表。
if (find(begin(fonts), end(fonts), reinterpret_cast<char*>(font) ) != end(fonts))
我正在使用迭代器遍历字符串数组。
array<string, 7> fonts = {
"GLUT_BITMAP_TIMES_ROMAN_24",
"GLUT_BITMAP_TIMES_ROMAN_10",
"GLUT_BITMAP_HELVETICA_12",
"GLUT_BITMAP_HELVETICA_10",
"GLUT_BITMAP_8_BY_13",
"GLUT_BITMAP_9_BY_15" };
我的问题是,由于该数组中的所有元素都是字符串,因此它在 void *
和 string
之间引发了类型错误。我不太确定如何将类型转换为 string
或者是否有更好的方法来检查 void *
是否在数组或什至是简单的列表中可能的选择。
最佳答案
GLUT_BITMAP_HELVETICA_18
是指向表示位图字体的对象的指针。它不是指向字符串或字体名称的指针。
你可以按照你的要求去做,但是你会想要一个代表字体的 void*
数组:
array<void*, 7> glut_fonts {
GLUT_BITMP_TIMES_ROMAN_24,
GLUT_BITMAP_TIMES_ROMAN_10,
GLUT_BITMAP_HELVETICA_12,
GLUT_BITMAP_HELVETICA_10,
GLUT_BITMAP_8_BY_13,
GLUT_BITMAP_9_BY_15
};
现在,我们可以像您希望的那样使用find
:
if (find(begin(glut_fonts), end(glut_fonts), font) != end(glut_fonts)) {
// Do stuff if the given font exists
}
我们也可以用这个来获取名字:
array<string, 8> font_names = {
"GLUT_BITMAP_TIMES_ROMAN_24",
"GLUT_BITMAP_TIMES_ROMAN_10",
"GLUT_BITMAP_HELVETICA_12",
"GLUT_BITMAP_HELVETICA_10",
"GLUT_BITMAP_8_BY_13",
"GLUT_BITMAP_9_BY_15",
"[unknown font]"
};
// Get the index of the font
// std::distance comes from <iterator>
auto index = distance(begin(glut_fonts), find(begin(glut_fonts), end(glut_fonts), font))
string name = font_names[index];
关于c++ - 如何将 `void *`类型改为 `string`类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55437598/