重写类以使其更通用,以实现可移植性
Rewriting a class to be more generic for portability
我之前问过这个问题 删除Windows库依赖项关于删除 Windows 库依赖项。用户:https://stackoverflow.com/users/214671/matteo-italia 已经解释过,对于Threads
,您可以用std::mutex
替换Windows特定的代码,但至于Processes
,标准中目前没有任何内容,这是我接受的答案。
在另一个很好的答案中,用户:https://stackoverflow.com/users/7594711/soronelhaetir 建议使用boost-interprocess
。但是,我当前的项目boost
是免费的。
对于当前类:
块进程:
BlockProcess.h
#ifndef BLOCK_PROCESS_H
#define BLOCK_PROCESS_H
#include <Windows.h>
#include <process.h>
#include <string>
namespace demo {
class BlockProcess final {
private:
HANDLE hMutex_;
public:
explicit BlockProcess( const std::string& strName );
~BlockProcess();
bool isBlocked() const;
BlockProcess( const BlockProcess& c ) = delete;
BlockProcess& operator=( const BlockProcess& c ) = delete;
};
} // namespace demo
#endif // !BLOCK_PROCESS_H
BlockProcess.cpp
#include "BlockProcess.h"
namespace demo {
BlockProcess::BlockProcess( const std::string& strName ) {
hMutex_ = CreateMutex( nullptr, FALSE, strName.c_str() );
}
BlockProcess::~BlockProcess() {
CloseHandle( hMutex_ );
}
bool BlockProcess::isBlocked() const {
return (hMutex_ == nullptr || GetLastError() == ERROR_ALREADY_EXISTS);
}
} // namespace demo
我的问题仍然部分相同:removing windows dependencies
但现在变成了:有没有办法我可以以通用方式重写这个类,这样我就不倾向于使用:#include <Windows.h>
而不使用任何第三方库,如boost
?
不幸的是,当前的C++标准库没有提供太多的IPC方式,并且不包括任何命名的互斥锁支持。(它提供了shared_mutex
但那是另一回事。因此,您被外部依赖项所困。该外部依赖项可以是您所做的Windows API,也可以是Boost(提供named_mutex
(,或者其他东西。
我完全理解您不愿意引入对 Boost 的依赖。但是,如果您尝试自己处理这个问题并开始添加替代平台支持,您很快就会发现您只是在重新发明 Boost 库,几乎可以肯定做得不好。因此,在这种情况下,您应该权衡您对便携性的要求与您对咬紧牙关和使用 Boost 的厌恶。
- C++Union/Struct位域的实现和可移植性
- 静态库可移植性
- C++:Unicode 字符串文字的可移植性
- 如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
- 在为视频游戏实施基本的二进制序列化时,请担心可移植性
- 重写类以使其更通用,以实现可移植性
- Visual Studio 2015 <=> QtCreator 5 (c++) 代码可移植性
- 通过虚拟接口类导出C 类的可移植性
- 位移位可移植性
- 如何在Visual Studio中进行串行端口编程C++Windows和Linux之间的可移植性?
- 提高 Python 可移植性问题
- 库如何在不同的操作系统之间实现可移植性
- 使用C 11 /最近的G 版本(4.7 / 4.6)的可移植性
- 模板函数实例化的可移植性问题
- XCode、命名空间、C++和代码可移植性
- 嵌入式C++项目 - 需要支持智能指针.可能的可移植性问题
- 使用指针遍历数组的可移植性
- 头文件中内联自由函数的可移植性
- 并提高.进程间牺牲性能来实现可移植性
- 跨平台字符串类实现良好的模型可移植性"Best Practices"是什么?