有没有一种方法可以更好地比较第一
和最后
的if?例如,如果我希望float
和double
有不同的行为。有没有一种方法可以使用constexpr内部的实际类型(而不是它在内存中的大小)进行比较?下面是我的代码:
void print(T val)
{
if constexpr (sizeof(T) == 1) {
printf("%c", val);
}
else if constexpr (std::is_integral_v<T>) {
printf("%d", val);
}
else if constexpr (sizeof(T) == sizeof(float)) {
printf("%f", val);
}
printf("\n");
}
int main(int argc, char** argv)
{
print(5.5f);
return 0;
}
是的!
您正在查找std::is_same_v
:
void print(T val)
{
if constexpr (std::is_same_v<T, char>) {
printf("%c", val);
}
else if constexpr (std::is_integral_v<T>) {
printf("%d", val);
}
else if constexpr (std::is_same_v<T, float>) {
printf("%f", val);
}
printf("\n");
}
int main(int argc, char** argv)
{
print(5.5f);
return 0;
}
注意:。第一个条件与您的条件不太相同(例如无符号char
,有符号char
,std::byte
…),但是您可以根据需要进行修改。
另外,%d
用于int
(在将晋升应用于val
之后);您的is_integral_v
检查不足以保证这一点。