我想编写一个使用另一个类(Class1)的类(Class2).
Class1需要2个参数(第2个参数总是相同的,所以不需要谈论它).
Class2需要1个参数,我想在将参数传递给从Class1创建的对象之前检查它是否有效
所以我的代码看起来像这样:
class Class1 { public: Class1(const string & filename, some_other_parameters); ... }; class Class2 { Class1 C1; public: Class2(const string & filename) // I want to verify this filename before passing it to C1 object }; Class2::Class2(const string & filename) : C1(filename, some_other_parameters){ } int main() { Class2 myClass("file.txt"); }
那么有没有办法在将文件名传递给C1之前检查文件名,还是应该在main()中执行?
只需调用一个静态函数来进行验证,否则转发它的参数:
class Class2 { Class1 C1; static const std::string& validate_filename(const std::string& filename); public: Class2(const string & filename) }; const std::string& Class2::validate_filename(const std::string& filename) { if (filename.size() < 2) throw std::runtime_error("filename too short"); return filename; } Class2::Class2(const string & filename) : C1(validate_filename(filename), some_other_parameters){ }
请注意,如果要转换参数,可以使用类似的技术.所以你可以从宽字符转换为utf8并强制路径为规范格式,...并且仍然有成员变量为const.
您还应该考虑哪个类应该负责验证.如果C1对其参数有约束,那么它应该检查它们.另一方面,如果任何字符串都可以,但C2有约束,那么它必须进行检查.