C++:如何使函数只返回作为列表一部分的字符串
C++: How to make function return only strings which are a part of a list?
我希望我的函数返回一个字符串,但只返回作为特定字符串列表/集合成员的字符串。我该怎么做?
您不希望返回字符串,而是希望返回一个具有附加限制的字符串(作为某个预定义集合的一部分(。
为此,你需要一种新的类型:
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;
};
在您的应用程序中,您可以对这种类型进行操作,并在需要时访问值。
想使用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
。
如果这意味着如果str
在预定义列表中,则返回std::string
,如果不在,则返回void
,那么您可能需要<type_traits>
中描述的一些技巧。
您可以在下面的示例中执行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;
}
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- C++:如何使函数只返回作为列表一部分的字符串
- 如何在C++中创建 2d 数组,其中一部分包含循环计数器,另一部分包含数字列表?
- 按文件中列表中行的一部分排序
- 标准的哪一部分决定了现场成员与初始化器列表的优先级
- C++:getline不是参数列表的一部分
- 在C++中遍历列表的一部分
- 是被视为列表一部分的单链列表的根节点
- 在c++中传递数组并检查列表是否为数组的一部分
- visualstudio2010-有没有一个列表,说明哪些编译器支持C++标准的哪一部分