我想创建一个类,它接受std :: function并允许处理指定的异常,但我不确定它是否可行.
这是一些伪草案:
//exception types
template<class... Args>
class CustomExceptionHandler
{
public:
CustomExceptionHandler(std::function<void()> clb): clb_(std::move(clb)){}
void ExecuteCallback()
{
try
{
clb_();
}
/*catch specified exception types*/
}
private:
std::function<void()> clb_;
};
//usage
CustomExceptionHandler<std::out_of_range, std::overflow_error> handler(clb);
handler.ExecuteCallback();
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用可变参数模板来获取异常类型并在以后使用它.可能吗 ?
我猜那个元组可能会有所帮助.
我在工具链文件中看到了以下设置 CMAKE_CXX_FLAGS 的方法:
SET(CMAKE_CXX_FLAGS "-m32" CACHE STRING "C++ compiler flags" FORCE)
Run Code Online (Sandbox Code Playgroud)
我应该在工具链文件中使用它而不是
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
Run Code Online (Sandbox Code Playgroud)
?
它们之间有什么区别?
我想将参数化测试与类型化测试混合在一起。这是我的尝试:
struct X {};
struct Y {};
template <typename T>
struct MyTestFixture: public ::testing::Test
{
T t;
};
template <typename T, typename Param>
struct MyTestFixtureWithParam : public MyTestFixture<T>,
public ::testing::WithParamInterface<Param>
{
};
using MyTestFixtureWithXandString = MyTestFixtureWithParam<X, std::string>;
TEST_P(MyTestFixtureWithXandString, Test1)
{
}
INSTANTIATE_TEST_CASE_P(Name, MyTestFixtureWithXandString,
::testing::Values("a", "b"));
using MyTestFixtureWithYandString = MyTestFixtureWithParam<Y, std::string>;
TEST_P(MyTestFixtureWithYandString, Test1)
{
}
INSTANTIATE_TEST_CASE_P(Name, MyTestFixtureWithYandString,
::testing::Values("a", "b"));
Run Code Online (Sandbox Code Playgroud)
Gtest 是否包含一些混合 TYPED_TEST 和 TEST_P 的宏,或者上面的代码是实现我的目标的唯一方法?
我有一个 C++ 共享库 - libA.so. 我使用-fvisibility=hidden标志隐藏符号。应该可见的符号具有以下属性:__attribute__ ((visibility ("default"))). 该库链接到静态库 - libB.a。该静态库 ( libB.a) 中的所有符号应仅对共享库 ( libA.so)可见。我也用 flag 编译了静态库-fvisibility=hidden。我得到了想要的结果 - 来自libB.a的符号仅对libA.so外部世界可见但对外部世界隐藏,例如以下命令nm -C libA.so不显示来自libB.a.
你能解释一下这个标志-fvisibility=hidden是如何在上面的场景中与静态库一起在内部工作的吗?
我有两个具有不同名称的 Debian 软件包:configA.deb、configB.deb。两者的控制文件中都有以下几行:
Provides: my-config
Replaces: my-config
Run Code Online (Sandbox Code Playgroud)
并且两者都提供相同的内容 - file: config
当我在已安装 configA.deb 的情况下尝试安装 configB.deb 时,出现以下错误:
dpkg: error processing archive configB.deb (--install):
trying to overwrite '/home/user/configs/config', which is also in package configA.deb
Run Code Online (Sandbox Code Playgroud)
我希望安装 configB.deb 而不先删除/清除 configA.deb 并且不使用 option --force-overwrite。是否可以?
我用unique_ptr成员分析一个类。可以从不同的线程使用该成员。还有一种销毁该成员的方法:
void uninitialize()
{
std::unique_ptr<Worker> worker;
{
std::lock_guard<std::mutex> guard(mtx_);
worker = std::move(worker_);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道该暗示的目的是什么。上面和下面的实现之间有什么区别吗?:
void uninitialize()
{
std::lock_guard<std::mutex> guard(mtx_);
worker_.reset();
}
Run Code Online (Sandbox Code Playgroud)
Worker没有定义move构造函数。
我想对存储在stringstream对象中的数据使用按位取反。以下代码可以正常工作:
std::uint8_t x = 0x01;
x = ~x;
std::stringstream buf;
buf << x;
std::string data = buf.str();
std::cout << std::hex << static_cast<int>(data[0]) << std::endl;
//result: fffffffe
Run Code Online (Sandbox Code Playgroud)
当我以这种方式使用按位求反时:
std::uint8_t x = 0x01;
std::stringstream buf;
buf << ~x;
std::string data = buf.str();
std::cout << std::hex << static_cast<int>(data[0]) << std::endl;
//result: 0x2d
Run Code Online (Sandbox Code Playgroud)
我得到了意外的结果。怎么解释呢?如何与运算符<<一起使用按位求反?
解决合并冲突后,我已将文件添加到暂存区。然后我不小心执行了一个带有修改选项的提交命令:
git commit --amend --no-edit
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
fatal: You are in the middle of a merge -- cannot amend.
Run Code Online (Sandbox Code Playgroud)
这是否意味着根本没有执行提交命令?我可以继续使用正确的命令吗?:
git commit --no-edit
Run Code Online (Sandbox Code Playgroud) 我有以下简单的结构:
struct X
{
X(std::string name, int value): name_(name), value_(value){}
std::string name_;
int value_;
};
Run Code Online (Sandbox Code Playgroud)
我想将其与boost可选一起使用而不进行复制。这是一个选择:
boost::optional<X> op;
op.emplace("abc", 5);
Run Code Online (Sandbox Code Playgroud)
是否可以不使用emplace函数?(我的意思是一行表达式)
当我在 Windows 下运行以下 32 位应用程序(调试模式)时,内存使用量达到 2GB 限制并且当 i 等于42885988时循环中断:
for(int i = 0; i < 104857600; ++i)
{
uint8_t* ptr = (uint8_t*)malloc(1);
if (!ptr)
{
break;
}
*ptr = 0;
}
Run Code Online (Sandbox Code Playgroud)
104857600 那是 100mb 那么如何解释上述程序的行为?
c++ ×7
c++11 ×4
boost ×1
c ×1
cmake ×1
deb ×1
debian ×1
git ×1
googlemock ×1
googletest ×1
symbols ×1
visibility ×1