小编Che*_* OT的帖子

为什么未来的andThen没有链接结果?

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))

但是对于andThenin 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)

scala future

21
推荐指数
1
解决办法
1万
查看次数

当通过一对迭代器初始化时,向量是否知道要先保留?

请考虑以下代码.

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_backback_inserter_iterator::operator=

如果没有,我可能需要用uSize0 初始化它然后执行memcpy_s构造函数块.

c++ stl

19
推荐指数
2
解决办法
1365
查看次数

不恰当的亲密关系和特征嫉妒之间有什么区别?

两种气味都在福勒的书"重构"中有所描述.

我知道这些气味的含义是:

  • Feature Envy是一个对象中的一个方法在另一个对象上调用了六个获取方法.
  • 不恰当的亲密关系是两个班级经常依赖于彼此的私人部分.

看起来两种气味都表明一个对象的一部分太多依赖于另一个对象.

有人可以解释这两种气味之间的主要区别吗?

language-agnostic refactoring

15
推荐指数
1
解决办法
2124
查看次数

是否可以使用std :: unique_ptr来管理DLL资源?

LoadLibrary我的项目中有很多,需要FreeLibrary手动调用每个项目LoadLibrary.我想使用std::unique_ptrwith specific deleter来使它自动释放我的dll资源.

这就是我想要定义的内容:

std::unique_ptr<HMODULE, BOOL(*)(HMODULE)> theDll(LoadLibrary("My.dll"), FreeLibrary);
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨类型不匹配.我发现它期望*HMODULELoadLibrary.这std::unique_ptr<A>A*是它的指针类型.看起来我仍然需要定义一个新类来管理DLL资源(LoadLibrary在构造函数和FreeLibrary析构函数中).

有可能std::unique_ptr<A>只是期望A它的指针类型?

更新,

以下是新类的优缺点,并使用std :: unique_ptr,从答案中总结出来.

创建另一个dll管理类,

优点:

  • 完全可控以自定义DLL语义.
  • 将DLL相关部分隔离到一个具有一个职责的类中.
  • 如果需要更多DLL功能,如暴露符号,则易于扩展.

缺点:

  • 需要重建RAII部分已经完成了stadard自动指针.
  • 在RAII部分有机会犯错.
  • 需要声明一个新类.

std::unique_ptr与自定义删除器一起使用,

优点:

  • 无需申报另一个班级.
  • 重用RAII部分unique_ptr.
  • 也许move semantics防止DLL模块实例被复制?

缺点:

  • Dll资源语义可能不适合标准自动指针,并且容易出错?
  • 模板参数unique_ptr很复杂,很难找到错误的位置.
  • HMODULEvoid*,无类型,可能是与unique_ptr集成的问题?

如果我错了,请在评论时纠正我.

c++ dll raii c++11

9
推荐指数
2
解决办法
1583
查看次数

如何隐藏 Xcode 控制台中的 os_log 时间戳?

当我更改为从 to 记录我的消息printos_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)

在此处输入图片说明

xcode logging swift

8
推荐指数
1
解决办法
422
查看次数

将MS HANDLE初始化为nullptr是否安全?

我知道使用nullptr更"打字".它可以区分pointer type并且0在函数重载和模板特化方面运行良好.

所以我不确定在每个//初始化用法中替换旧的Win32项目中的NULLto 是否安全?nullptrHANDLEHWNDHINSTNACE

任何建议都会有所帮助.谢谢

c++ winapi

6
推荐指数
1
解决办法
4893
查看次数

公开begin()和end()的const和nonconst版本,用智能指针迭代成员向量

// 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++ const smart-pointers const-iterator

6
推荐指数
1
解决办法
774
查看次数

使用用户定义的默认构造函数对普通结构进行 memset 是否安全?

我知道如果一个 C++ 结构是普通旧数据(“POD”),那么这保证了它的内存结构中没有魔法,所以这意味着 amemcpy到一个字节数组并且memcpyback 是安全的。

我也知道在标准中 POD 结构不应该有用户定义的构造函数。在我现在拥有的项目中,有一些普通结构(只有数据字段),定义了一个默认构造函数,将数据成员初始化为 0。我看到其他客户端memset(&obj, 0, sizeof obj);在使用该结构之前会使用。

memset在使用非 POD 结构之前,它是否可以或安全?

c++

5
推荐指数
1
解决办法
1366
查看次数

了解stateful_actor

我已经在examples/curl/curl_fuse.cpplibcaf_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)

c++ c++-actor-framework

5
推荐指数
1
解决办法
280
查看次数

E_FAIL或S_FALSE,哪个更适合表示没有这样的属性?

我有一个图像检测模块,封装为COM模块.我导出的Key/Value GetterAPI,如: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?

  1. S_FALSE:一切都很好,只是图像没有这样的可选属性.

    • 强制用户检查hr == S_OK
    • 查询没有这种可选属性的图像不是错误.
  2. E_FAIL:不!出了点问题.您不应该查询此密钥.

    • 客户可以通过FAILED轻松检查(小时)
    • 使用此密钥查询此不存在的值是一个错误.

更新,(感谢Remy Lebeau)

  1. HRESULT_FROM_WIN32(ERROR_NOT_FOUND):不!没有这样的元素/属性.

    • 客户可以通过FAILED轻松检查(小时)
    • 虽然它代表一个错误,但用户仍然可以通过检查知道其含义hr.

c++ api winapi interface

5
推荐指数
1
解决办法
1948
查看次数