c++中string和ofstream参数的null类似java
Java-like null for string and ofstream arguments in c++
我有一些Java代码(构造函数)
RecursiveDescentParser
(
std::string inputStream,
bool fileService,
std::string filePathName,
std::ofstream writer
)
{
input_ = inputStream;
tokenizer_ = new Tokenizer(inputStream);
if (fileService == true){
error = new ErrorHandling(fileService, std::move(writer));
}
else{
error = new ErrorHandling(fileService, std::ofstream());
}
compiled_ = "";
}
Tokenizer *tokenizer_;
std::string input_, compiled_;
我想模拟c++中的调用
RecursiveDescentParser *parser = new RecursiveDescentParser
(
stream,
false,
null,
null
);
如果我使用指针参数
std::string *str; std::ofstream *out
我可以传入nullptr,但如果我选择不使用指针参数,我就不能传入null。我能做些什么来模拟传递null给std::string和std::ofstream?
指针是一种选择;但这会造成复杂性,因为您需要单独管理对象或使用智能指针。共享指针是一种可能,并且提供与Java的对象引用非常相似的语义(只是引用计数而不是垃圾收集)。
对于可空对象类型,可以使用Boost。可选,或者实现您自己的可空包装器类。有传言说optional
将被包含在未来的标准库中;但是现在,你需要Boost来实现。
或者,提供第二个根本不接受这些参数的构造函数可能更有意义。
我将如何改变你的用法:
RecursiveDescentParser
(
std::string inputStream,
bool fileService = false,
std::string filePathName = "",
std::ofstream* writer = NULL
)
RecursiveDescentParser *parser = new RecursiveDescentParser(stream);
您有两个选择—创建一个表示可选值的包装器类或使用指针。我强烈推荐第一种选择。
在某些情况下,您可能会认为空字符串等同于未设置值。
遗憾的是,c++中的字符串是对象,与java不同,c++对象不能为空。
从我的理解,你正在创建一个构造器递归的descentparser。构造函数的任务是初始化对象。
如果允许构造函数接受指针,它可以接受空路径字符串,那么它将被创建为空路径字符串,因为它的构造函数的工作是初始化所有字段,而空字段没有初始化,这将不是一个好的解决方案。
我的建议是将构造函数设为私有,但创建一个可以接受构造函数的参数的公共方法,但也要有一个指向字符串而不是对象的指针。如果路径字符串指针为空,则抛出异常或返回错误对象。如果路径字符串是有效的,创建一个新的解析器,从引用到路径字符串指针所指向的字符串,并返回这个引用。
虽然,我可以完全关闭,但这只是一个建议,我欢迎所有建设性的批评,为什么这不会工作
- 如何在c++中使用引用实现类似python的行为
- 使用Qt C++计算类似Git的SHA1哈希
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 类似枚举的计算常量
- 如何在 c++ 中'NULL'字符串
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 类似于strcat()的函数出现问题
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std中有类似find_last_of的函数,而string中没有
- std::ranges::elements_view,用于自定义类似元组的数据
- C++win32 API创建多个类似视口的窗口
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 算术运算的结果类似于:C浮点变量中的1/3
- 在没有未定义行为的情况下实现类似std::vector的容器
- int 函数C++可以返回类似 "NULL" 的东西?
- c++中string和ofstream参数的null类似java