andThen
我从这个答案中学到的意思是一个函数作曲家.
比如说
f andThen g andThen h
Run Code Online (Sandbox Code Playgroud)
将等于
h(g(f(x)))
Run Code Online (Sandbox Code Playgroud)
这意味着h function
将从中接收输入g(f(x))
但是对于andThen
in Future
,所有关闭以下内容然后总是从原始结果中获得结果Future
.
Future{
1
}.andThen{ case Success(x) =>
println(x) // print 1
Thread.sleep(2000)
x * 2
}.andThen{ case Success(x) =>
println(x) // print 1
Thread.sleep(2000)
x * 2
}
Run Code Online (Sandbox Code Playgroud)
相比于
val func: Function1[Int, Int] = { x: Int =>
x
}.andThen { y =>
println(y) // print 1
y * 2
}.andThen { z =>
println(z) // print …
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码.
struct MyData{
MyData(const BYTE* pData, size_t uSize)
: bucket_(pData, pData + uSize)
{}
std::vector<BYTE> bucket_;
};
Run Code Online (Sandbox Code Playgroud)
从一对迭代器初始化时,我bucket_
是第reserve
一个做的吗?有点像vec.reserve(std::distance(begIter, endIter))
.
或者它只是简单地执行严重的push_back
或back_inserter_iterator::operator=
?
如果没有,我可能需要用uSize
0 初始化它然后执行memcpy_s
构造函数块.
两种气味都在福勒的书"重构"中有所描述.
我知道这些气味的含义是:
看起来两种气味都表明一个对象的一部分太多依赖于另一个对象.
有人可以解释这两种气味之间的主要区别吗?
LoadLibrary
我的项目中有很多,需要FreeLibrary
手动调用每个项目LoadLibrary
.我想使用std::unique_ptr
with specific deleter
来使它自动释放我的dll资源.
这就是我想要定义的内容:
std::unique_ptr<HMODULE, BOOL(*)(HMODULE)> theDll(LoadLibrary("My.dll"), FreeLibrary);
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨类型不匹配.我发现它期望*HMODULE
从LoadLibrary
.这std::unique_ptr<A>
将A*
是它的指针类型.看起来我仍然需要定义一个新类来管理DLL资源(LoadLibrary
在构造函数和FreeLibrary
析构函数中).
有可能std::unique_ptr<A>
只是期望A
它的指针类型?
更新,
以下是新类的优缺点,并使用std :: unique_ptr,从答案中总结出来.
创建另一个dll管理类,
优点:
缺点:
std::unique_ptr
与自定义删除器一起使用,
优点:
unique_ptr
.move semantics
防止DLL模块实例被复制?缺点:
unique_ptr
很复杂,很难找到错误的位置.HMODULE
是void*
,无类型,可能是与unique_ptr集成的问题?如果我错了,请在评论时纠正我.
当我更改为从 to 记录我的消息print
时os_log
,它确实为每条消息提供了非常详细的时间戳。但有时我不需要长时间戳信息占用屏幕空间。
如何隐藏/重新格式化 Xcode 的控制台,或者我可以配置OSLog
为暂时不显示时间戳?或者我应该改用打印?
这是我的记录器用途
let logger = OSLog(subsystem: "com.my.myapp", category: "MediaObj")
os_log(.debug, log: logger, "....my...message...")
Run Code Online (Sandbox Code Playgroud)
我知道使用nullptr
更"打字".它可以区分pointer type
并且0
在函数重载和模板特化方面运行良好.
所以我不确定在每个//初始化用法中替换旧的Win32项目中的NULL
to 是否安全?nullptr
HANDLE
HWND
HINSTNACE
任何建议都会有所帮助.谢谢
// Cat.h
class Cat
{public:
void const_meow() const{ ... };
void meow(){ ... };
};
class CatLibrary
{public:
std::vector<std::shared_ptr<Cat>>::iterator begin()
{
return m_cat_list.begin();
}
// compile error, the compiler complains cannot covert type
// from `std::vector<std::shared_ptr<Cat>>::const_iterator`
// to `std::vector<std::shared_ptr<const Cat>>::const_iterator`
std::vector<std::shared_ptr<const Cat>>::const_iterator begin() const
{
return m_cat_list.cbegin();
}
private:
std::vector<std::shared_ptr<Cat>> m_cat_list;
};
Run Code Online (Sandbox Code Playgroud)
// main.cpp
CatLibrary cat_library;
cat_library.add(std::make_shared<Cat>());
cat_library.add(std::make_shared<Cat>());
for(auto& cat: cat_library )
{
cat->const_meow();
cat->meow();
}
for(const auto& cat: cat_library)
{
cat->const_meow();
cat->meow(); // hope to compile error due to …
Run Code Online (Sandbox Code Playgroud) 我知道如果一个 C++ 结构是普通旧数据(“POD”),那么这保证了它的内存结构中没有魔法,所以这意味着 amemcpy
到一个字节数组并且memcpy
back 是安全的。
我也知道在标准中 POD 结构不应该有用户定义的构造函数。在我现在拥有的项目中,有一些普通结构(只有数据字段),定义了一个默认构造函数,将数据成员初始化为 0。我看到其他客户端memset(&obj, 0, sizeof obj);
在使用该结构之前会使用。
memset
在使用非 POD 结构之前,它是否可以或安全?
我已经在examples/curl/curl_fuse.cpp和libcaf_core/test/stateful_actor.cpp中读到了stateful_actor的一些用法.它似乎stateful_actor<State>
可以通过声明字段来绑定某些演员的状态State struct
.这非常有用.
我们可以将状态声明为字段class-based actor
以获得相同的效果吗?或者在stateful_actor
(例如线程安全访问)中有一些特殊处理?
以下示例中的actor是否提供相同的功能?
/* Class based actor */
struct ClassCounter : caf::event_based_actor
{
caf::behavior make_behavior() override {
return {
[=](inc_atom){ i += 1; }
, [=](ret_atom){ return i; }
};
}
const char* name() const override { return "I am class-based"; }
int i = 0;
};
/* Stateful actor */
struct CounterState
{
caf::local_actor* self;
int i = 0;
const char* name = "I am …
Run Code Online (Sandbox Code Playgroud) 我有一个图像检测模块,封装为COM模块.我导出的Key/Value Getter
API,如:GetImageAttr(UINT key, void* pValue);
.我们的产品可能或可能不会在图像上附加特殊结构,因此我的客户可以通过此API查询特定结构.
可能的用法如下:
ImageSpecialAttribute attr = {};
HRESULT hr = pImageDetector->GetImageAttr(IMAGE_SPECIAL_ATTRIBUTE, (void*)&attr);
Run Code Online (Sandbox Code Playgroud)
S_OK
如果图像具有这样的附着结构,则返回是微不足道的.但如果没有,我应该返回E_FAIL还是S_FALSE?
S_FALSE:一切都很好,只是图像没有这样的可选属性.
E_FAIL:不!出了点问题.您不应该查询此密钥.
更新,(感谢Remy Lebeau)
HRESULT_FROM_WIN32(ERROR_NOT_FOUND):不!没有这样的元素/属性.
hr
.