首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C++中以编程方式检查字符串类型

如何在C++中以编程方式检查字符串类型
EN

Stack Overflow用户
提问于 2021-03-16 16:20:42
回答 1查看 64关注 0票数 0

如何检查字符串是std::string类型还是const char*类型

代码语言:javascript
复制
template<typename B>
B check(B b)
{
    //
}

可以使用std::stringconst char*调用check

我不确定如何推断返回类型。如何确定应该是std::string还是const char*

EN

Stack Overflow用户

发布于 2021-03-16 16:26:54

正如我在一篇评论中所写的那样,如果你只需要处理const char *std::string,那么使用模板可能就太夸张了。

但是,如果您真的想这样做,您可以使用if constexpr

代码语言:javascript
复制
#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之前使用静态断言进行保护:

代码语言:javascript
复制
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
}
票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66651373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档