我想知道Logging类何时或多久应该刷新它的流 - 为什么?它应该在每个日志之后刷新,还是等待流缓冲区填充然后刷新,或者介于两者之间?
为了进一步说明我的问题:
我的日志记录类包含对某些输入的引用std::ostream stream和operator<<输入.我能够在每一行输入之后进行冲洗,让我们说使用std::endl;- 但我不这样做,而是我use stream << "\n"只是强制换行.当流缓冲区已满或正在进行流/记录器破坏时,我会发生刷新.
我有一个由 lib 和 bin 板条箱组成的工作区。运行货物test --lib会跳过二进制板条箱。
我需要为操作序列创建操作。这些操作共享以下行为。它们可以被评估,并且在构造时它们可以由单个 i32 参数化(例如 Sum)或根本不参数化(例如 Id)。
我创建了一个特征操作。评估部分是微不足道的。
trait Operation {
fn evaluate(&self, operand: i32) -> i32;
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何描述第二个需求。第一个选项是简单地让操作的具体实现处理该行为。
pub struct Id {}
impl Id {
pub fn new() -> Id {
Id {}
}
}
impl Operation for Id {
fn evaluate(&self, operand: i32) -> i32 {
operand
}
}
pub struct Sum {
augend: i32,
}
impl Sum {
pub fn new(augend: i32) -> Sum {
Sum { augend }
}
}
impl Operation for Sum {
fn evaluate(&self, addend: …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现Observer模式,但我不希望观察者通过维护引用列表来对我的程序安全负责ObservableSubject.
这意味着当Observer object生命结束时,我不想明确地调用ObservervableSubject::removeObserver(&object).
我想出了一个使用指针引用的想法ObservableSubject.
我的问题是:上面描述的实现和下面的尝试是否可行?在我的程序中发生了什么,我如何防止解除引用垃圾?
Apriori借口:这是一种理解C++的尝试,而不是应该具有实际用途或者优先于其他实现的东西.
我的解决方案:
// Example program
#include <iostream>
#include <string>
#include <vector>
class ObserverInterface {
public:
virtual ~ObserverInterface() {};
virtual void handleMessage() = 0;
};
class ObservableSubject
{
std::vector<std::reference_wrapper<ObserverInterface*>> listeners;
public:
void addObserver(ObserverInterface* obs)
{
if (&obs)
{
// is this a reference to the copied ptr?
// still, why doesnt my guard in notify protect me
this->listeners.push_back(obs);
}
}
void removeObserver(ObserverInterface* obs)
{
// todo
}
void …Run Code Online (Sandbox Code Playgroud)