我希望我的函数返回一个字符串,但仅返回属于特定列表/字符串集的成员的字符串。我该怎么做呢?
答案 0 :(得分:0)
愿意使用std::set<std::string>
吗?
#include <iostream>
#include <set>
#include <string>
std::string helper(const std::string & str,
const std::set<std::string> & lst)
{
return lst.find(str) == lst.end() ? "" : str;
}
int main()
{
std::set<std::string> lst = {"alpha", "beta", "gamma"};
std::cout << "return " << helper("alpha", lst) << "\n";
std::cout << "return " << helper("zeta", lst) << "\n";
return 0;
}
输出
return alpha
return
当然,这实际上取决于您对不返回的定义是什么。
如果这表示一个空字符串,请使用上述解决方案。保持生活简单。
如果这意味着错误并且程序应终止,则可以#include <cassert>
,只需
assert(lst.find(str) != lst.end());
如果这意味着要处理的异常,则可以try
throw
和catch
。
如果这意味着如果std::string
在预定义列表中,则返回str
,但如果不是void
,则返回<type_traits>
,那么您可能需要Out of segment space
中所述的一些技巧
答案 1 :(得分:0)
您不想返回一个字符串,而是想返回一个具有附加限制(属于某些预定义集合的一部分)的字符串。
为此,您需要一个新类型:
class BusinessStringWrapper {
public:
BusinessStringWrapper(std::string arg): value{arg} {
if (/* arg is not ok */) {
throw;
}
}
// you can replace that with factory method
// can also return std::optional instead of throwing if the condition is not met
// that depends on your application
std::string value() const { return value; }
private:
const std::string value;
};
在您的应用程序中,您将使用此类型,并在需要时访问值。
答案 2 :(得分:0)
您可以在下面的示例中使用std::map<CardType, std::string>
,或使用std::map<int, std::string>
将字符串与任何整数关联。例如mp[123]="abcd"
#include <iostream>
#include <string>
#include <map>
enum CardType {
SPADE,
HEART,
CLUBS,
DIAMD
};
std::map<CardType, std::string> mp{
{CardType::SPADE, "Spade"},
{CardType::HEART, "Heart"},
{CardType::CLUBS, "Clubs"},
{CardType::DIAMD, "Diamond"}
};
int main()
{
std::cout << mp[CardType::SPADE] << std::endl;
return 0;
}