小编uni*_*uni的帖子

Linux C++下的USB驱动器序列号

有没有办法用C++确定linux中usb-drive的s/n?

如果不是C++是否有任何其他方式,从不同的hwinfo -diskhdparm -i

c c++ linux usb-drive

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

静态库的静态成员

我有带有静态成员的静态库。该库静态链接到主应用程序及其插件之一。看起来像在 main(应用程序)和 dll(插件)中初始化静态变量。

\n\n

问题:如何避免动态库加载时静态变量重新初始化。或者我可能错过了一些简单的事情?

\n\n

更多信息:

\n\n

这是一个简单的静态库,包含静态成员及其 getter 和 setter:

\n\n

orbhelper.h\n

\n\n
class ORBHelper {\n    static std::string sss_;\npublic:\n    static std::string getStr();\n    static void setSTR(std::string str);\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

orbhelper.cpp\n

\n\n
std::string ORBHelper::sss_ = "init";\n\nstatic std::string ORBHelper::getStr()\n{\n    std::cerr << "get " << sss_.c_str() << std::endl;\n    return sss_;\n}\nstatic void ORBHelper::setSTR(std::string str)\n{\n    sss_ = str;\n    std::cerr << "set " << sss_.c_str() << std::endl;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该库在 main.cpp 中使用,也在另一个动态库中使用,该动态库在 main.cpp 中加载。\n在 main.cpp 中我设置了静态字符串,并在一个动态库函数中我想获取它。

\n\n

在 main 中设置静态变量:

\n\n

主.cpp\n

\n\n
...\nORBHelper::setStr("main");\nstd::cerr << ORBHelper::getStr().c_str() …
Run Code Online (Sandbox Code Playgroud)

c++ static-members static-libraries

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

为什么 std::string_view 比 const char* 快?

还是我在测量别的东西?

在这段代码中,我有一堆标签 ( integers)。每个标签都有一个字符串表示(const char*std::string_view)。在循环堆栈值被转换为相应的字符串值。这些值附加到预先分配的字符串或分配给数组元素。

结果表明,带有std::string_view的版本比带有 的版本稍快const char*

代码:

#include <array>
#include <iostream>
#include <chrono>
#include <stack>
#include <string_view>

using namespace std;

int main()
{
    enum Tag : int { TAG_A, TAG_B, TAG_C, TAG_D, TAG_E, TAG_F };
    constexpr const char* tag_value[] = 
        { "AAA", "BBB", "CCC", "DDD", "EEE", "FFF" };
    constexpr std::string_view tag_values[] =
        { "AAA", "BBB", "CCC", "DDD", "EEE", "FFF" };

    const size_t iterations = 10000;
    std::stack<Tag> stack_tag;
    std::string out; …
Run Code Online (Sandbox Code Playgroud)

c++ optimization benchmarking string-view

5
推荐指数
2
解决办法
1520
查看次数

为什么插入到地图时隐式转换不起作用

我有一个可以隐式转换为函数可接受的类型的结构std::map::insert()

我按原样使用结构,但出现编译错误:

没有重载函数可以转换所有参数类型

但是,如果我使用显式转换结构static_cast,它会被接受。

我的问题是,为什么隐式转换在这里不起作用?

示例代码:

struct MyStruct
{
    MyStruct(std::string s, int i) : data(s, i) {}
    operator std::pair<std::string, int>() const
    {
        return data;
    }

private:
    std::pair<std::string, int> data;
};

MyStruct my_val1("hello", 4);
MyStruct my_val2("world", 2);

std::map<std::string, int> my_map {};
my_map.insert(static_cast<std::pair<std::string, int>>(my_val1)); // compiles
my_map.insert(my_val2);                                           // not compiles
Run Code Online (Sandbox Code Playgroud)

c++ implicit-conversion

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

使用C++追加CORBA序列的简便方法

我正在使用omniORB和C++.

在我的应用程序中,我得到了几个不同模块的小CORBA序列,然后我需要将它们组合成一个大序列以进行进一步处理.有这么简单的方法吗?像seq2.append(seq1)或的东西seq2.push_back(seq1).还是一些运营商?(我真的是STL-things的新手).

我发现的唯一方法是手动遍历小序列的每个元素并将其添加到大序列中.

//idl
struct Device;
typedef sequence<Device> DevicesList;

//c++
icore::DevicesList full_list;
foreach (const DStatusList &stlist, states_) {
    icore::DevicesList list = convertList(stlist);
    int newlength = full_list.length() + list.length();
    int last_index = full_list.length();
    full_list.length(newlength);
    int j=0;
    for(int i=last_index; i< last_index+list.length(); i++,j++) {
        full_list[i] = list[j];
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ corba sequence omniorb

4
推荐指数
1
解决办法
5541
查看次数

不能在结构成员函数内使用默认的不等运算符

考虑使用默认比较稍微修改一下 cppreferenece.com 的示例:

struct Point
{
    int x;
    int y;

    auto operator<=>(const Point&) const = default;
    //bool operator!=(const Point&) const = default;

    bool isDifferent(const Point& another) const
    {
        // Fails without explicit operator !=
        return operator != (another);
    }

    bool isSame(const Point& another) const
    {
        // Always OK
        return operator == (another);
    }
};

int main()
{
    Point pt1{1, 1}, pt2{1, 2};
 
    std::cout << std::boolalpha
        << (pt1 == pt2) << ' '  // Always OK
        << (pt1 != …
Run Code Online (Sandbox Code Playgroud)

c++ spaceship-operator c++20

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