如何检查变量是否为std::string类型的C++?

3

我正在使用模板函数,并需要一种测试变量是否为std::string类型的方法,以便将其与整数输入等区分开来,因为我在字符串上需要进行不同于整数的操作。 我尝试使用typeid来实现这一点,但遇到了困难。


7
通常情况下,你会使用(部分)特化或重载,因此在特化/重载中,你只需要知道该变量的类型。 - Jerry Coffin
你能提供更多的上下文吗?测试哪个变量,在什么情况下,解决什么问题? - Barry
这是一个任务,要求使用模板函数。举个例子,我可能需要减去两个数字,但也要从一个词中减去另一个词的一部分。例如,如果我有单词 pizzahut,而模板函数中的两个变量被输入为 pizzahut 和 hut,我将返回 pizza。现在问题是我需要在函数中区分整数和字符串的方法。 - FreeLand
@JerryCoffin 能否对函数模板进行部分特化?这样做不会只是将一个新的基本模板作为重载添加吗? - Baum mit Augen
不,函数模板没有部分特化。只有在创建一个模板化的函数对象而不是实际的函数模板时才会应用部分特化。 - Jerry Coffin
1个回答

11

只有重载:

template<typename T>
void myFunc(T t) {/* */}

void myFunc(std::string s) {/* */}

如果不同的类型需要发生不同的事情,那么它们应该在不同的函数中完成。这样代码就不会被类型检查混杂所干扰。你应该优先让编译器担心重载与类型的匹配。

如果你处于模板上下文中,并且需要像 myFunc<T>(t) 这样调用你的函数,那么你可以进行完全特化:

template<>
void myFunc<std::string>(std::string s) {/* */}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接