让我们说,在初始化宠物类时,我想排除或禁止狗或猫作为物种。抛出invalid_argument异常的正确方法是什么?
RewriteRule ^test/myscript\.php$ - [L]
答案 0 :(得分:2)
如果您考虑到一组特定的物种,我会这样做的方法是使用物种的枚举:
enum class Species {
horse,
lizard,
human
};
然后制作类Species
类的物种。这会将传递给构造函数的内容限制为"已批准"物种(即你在enum
中包含的物种)。只有在您拥有有限(且详尽无遗)的物种清单时,这才有效。
如果您希望物种不详尽,您可能希望拥有Species
基类并制作具体的物种子类。然后,您可以使用模板限制特定类型,这将是编译错误而不是异常 - 更为可取!
如果您不喜欢这些选项中的任何一个,那么您可以采用最严格且容易出错的方式,即只检查构造函数体中的字符串相等性,并抛出您得到猫的情况,狗,或任何其他不受欢迎的物种。
答案 1 :(得分:1)
Pet(const string & the_name, const string & the_species): name(the_name), species(the_species), age(0)
{
if (species == "cats" || species == "dogs")
throw std::invalid_argument( "received negative value" );
}