当前位置:  开发笔记 > 编程语言 > 正文

C++类 - 在将参数传递给成员对象之前验证它

如何解决《C++类-在将参数传递给成员对象之前验证它》经验,为你挑选了1个好方法。

我想编写一个使用另一个类(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()中执行



1> Martin Bonne..:

只需调用一个静态函数来进行验证,否则转发它的参数:

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有约束,那么它必须进行检查.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有