我正在编写一个模板化函数,该函数有时会进行比较
template<typename T>
void Foo(T val)
{
.
.
.
if(val != 0) // what if val is of type std::string?
{
doSomething();
}
}
这适用于整数数据,但是如果T是std :: string怎么办?我应该如何处理该条件,以便可以在函数中同时使用std :: string和int?
答案 0 :(得分:-2)
编辑:忽略我在下面键入的所有内容,仅使用模板专门化。
如果您还必须考虑字符串的可能性,则由于比较不同,您将不得不构建另一个函数来处理这些字符串,请使用函数重载而不是尝试将其与用于处理Integer的模板一起编译,浮标,双打等。您可以使用.compare(anotherstring or "") == 0
.empty()
.length() == 0
。如果您不熟悉这三个标准操作,我建议您仔细阅读。您的字符串处理函数将如下所示(取决于最适合您情况的子句):
void Foo(std::string val)
{
.
.
.
if (val.length() == 0) {
std::cout << "string is of 0 length\n";
} else {
std::cout << "string is of " << thing.length() << " length\n";
}
if (val.compare("") == 0) {
std::cout << "string is a blank string\n";
} else {
std::cout << "string is not a blank string\n";
}
if (val.empty()) {
std::cout << "string is empty\n";
} else {
std::cout << "string is not empty\n";
}
}
您甚至可以在一个大的检查器中or
将它们全部短路,并且不继续检查第一个检查器是否恢复原状,尽管在某些情况下这可能是多余的。像这样:
if (val.compare("") == 0 || val.length == 0 || val.empty()) { doSomething(); }
希望这对您有所帮助并且编码愉快