如何检查字符串是std::string类型还是const char*类型
template<typename B>
B check(B b)
{
//
}可以使用std::string或const char*调用check
我不确定如何推断返回类型。如何确定应该是std::string还是const char*
发布于 2021-03-16 16:26:54
正如我在一篇评论中所写的那样,如果你只需要处理const char *和std::string,那么使用模板可能就太夸张了。
但是,如果您真的想这样做,您可以使用if constexpr
#include <iostream>
#include <string>
#include <type_traits>
template<typename B>
B check(B b)
{
if constexpr (std::is_same_v<B, std::string>) {
std::cout << "std::string" << std::endl;
return b;
} else if constexpr (std::is_same_v<B, const char*>) {
std::cout << "const char *" << std::endl;
return b;
} else {
throw; // obviously you might want do to something different
}
}
int main() {
check("ciao");
check(std::string{"ciao"});
check(1); // throws
}此外,您可能希望在if constexpr之前使用静态断言进行保护:
template<typename B>
B check(B b)
{
static_assert(std::is_convertible_v<const char *, B>); // just an idea
if constexpr (std::is_same_v<B, std::string>) {
std::cout << "std::string" << std::endl;
return b;
}
else if constexpr (std::is_same_v<B, const char*>) {
std::cout << "const char *" << std::endl;
return b;
} else {
std::cout << "other type convertible from `const char *`" << std::endl;
}
}
int main() {
check("ciao");
check(std::string{"ciao"});
//check(1); // fails at compile time
}https://stackoverflow.com/questions/66651373
复制相似问题