小编aj3*_*423的帖子

从std :: map中查找具有最大值的元素

我正在尝试从std :: map获取具有最大值的元素,

int main() {
    map<int, int> m;
    m[1] = 100;
    m[2] = -1;

    auto x = std::max_element(m.begin(), m.end(), m.value_comp());

    cout << x->first << " : " << x->second << endl;
}
Run Code Online (Sandbox Code Playgroud)

为什么它打印第二个元素2 : -1

c++ stdmap std

15
推荐指数
2
解决办法
3万
查看次数

在Golang中,如何将泛型类型的接口与nil进行比较?

我需要一个链接节点来保存一些不同的接口类型,所以我用泛型来制作它,但是泛型类型any不能与 nil 进行比较,它显示错误,如注释中所示:

package main

type myInterface interface {
}
type node[T any] struct {
    next *node[T]
    leaf T
}

func (n *node[T]) GetFirstNodeHasLeaf() *node[T] {
    if n.leaf != nil { // <---- error here: cannot compare n.leaf != nil (mismatched types T and untyped nil)
        return n
    }

    if n.next == nil {
        return nil
    } else {
        return n.next.GetFirstNodeHasLeaf()
    }
}

func main() {
    var n = &node[myInterface]{}
    // fill n with lots of nodes
    n.GetFirstNodeHasLeaf() …
Run Code Online (Sandbox Code Playgroud)

generics go

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

获取虚拟成员函数的真实地址(或vTable中的索引)

在c ++中有没有办法获得成员函数的真实地址,或者vTable中的索引

更新:

我不知道vTable中的INDEX, 我不知道地址

这就是为什么我想知道这个:

我想挂钩DirectX 的函数ID3DXFont-> DrawText.如果我知道vTable中DrawText的索引,我可以替换它来做钩子.但是如何获得指数?如果它能够获得真实地址,我可以在vTable中搜索它以获得索引.

而不是特别ID3DXFont-> DrawText,未来可能还有其他一些功能,所以我正在尝试编写一个通用的钩子函数.

这是我到目前为止所尝试的:

#include <iostream>
using namespace std;

struct cls {
    virtual int fn1() {
        cout << "fn1 called" << endl;
        return 1;
    }
    virtual int fn2() {
        cout << "fn2 called" << endl;
        return 2;
    }
};

template <typename fn_t>
DWORD fn_to_addr(fn_t fn) { // convert function to DWORD for printing
    union U {
        fn_t fn;
        DWORD …
Run Code Online (Sandbox Code Playgroud)

c++ member-functions

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

动态添加数据到QTableView

我正在写一个简单的TableView根据

http://harmattan-dev.nokia.com/docs/library/html/qt4/itemviews-addressbook.html

class MyModel : public QAbstractTableModel {
    Q_OBJECT
public:
    QList<QPair<string, int> > data_;
....
Run Code Online (Sandbox Code Playgroud)

如何动态地向模型添加行?data_.insert(..)不会改变视图,目前我写一个函数来追加新行:

void my_append_data(const string& first, int second) {
    int row = rowCount(QModelIndex());
    insertRow(row); // insert a empty row
    // fill the row
    setData(createIndex(row, 0), QVariant::fromValue<string>(first), Qt::EditRole);
    setData(createIndex(row, 1), QVariant::fromValue<int>(second), Qt::EditRole);
}
// usage
model.my_append_data("11111", 111);
model.my_append_data("22222", 222);
Run Code Online (Sandbox Code Playgroud)

这似乎是低效的setData,因为在追加一行时调用两次,因为有两列,并且将来可能会有更多列.

有没有更好的方法来追加行?

谢谢.

qt row append tableview

6
推荐指数
2
解决办法
2万
查看次数

'this'指针在c ++ 11 lambda中发生变化

我在c ++ 11的lambda中发现了一个非常奇怪的问题.

#include <string>
#include <iostream>
using namespace std;

#include <boost/signals2.hpp>

boost::signals2::signal<void()> sig;

struct out {
    void print_something() {
        cout << "something" << endl;
    }
    out() {
        auto start = [&] {
            cout << "this in start: " << this << endl;
            this->print_something();
        };

        cout << "this in constructor: " << this << endl;

        // sig.connect(start);
        sig.connect([&] {
            cout << "this in signal: " << this << endl;
            start();
        });
        this->print_something();
    }
};

int main() {
    out o;
    sig(); …
Run Code Online (Sandbox Code Playgroud)

lambda pointers c++11

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

为什么 io_context 会出现在我的 boost asio 协程服务器中

我的服务器基于 boost spawn echo server 示例,并在此线程中进行了改进。真正的服务器很复杂,我做了一个更简单的服务器来显示问题:

服务器侦听端口 12345,从新连接接收 0x4000 字节数据。

客户端运行 1000 个线程,连接到服务器并发送 0x4000 字节数据。

问题:当客户端运行时,在 1 秒后通过控制台中的Ctrl-C杀死客户端进程,然后服务器io_context将停止,服务器运行到无限循环并消耗 100% 的 CPU。如果这没有发生,重复启动客户端并杀死它几次,它会发生。可能几次后它的TCP端口用完了,等几分钟再试一次,它是在我的机器上杀死客户端3~15次后发生的。

升压文件说,io_context.stopped()是用来判断它是否停止

通过显式调用 stop() 或由于工作用完

我从不调用io_context.stop(),并使用 amake_work_guard(io_context)来保持io_context不停止,但为什么它仍然停止?

我的环境:Win10-64bit,boost 1.71.0

服务器代码:

#include <iostream>
using namespace std;

#include <boost/thread/thread.hpp>
#include <boost/asio.hpp>
#include <boost/asio/spawn.hpp>
using namespace boost;
using namespace boost::asio;
using namespace boost::asio::ip;
namespace ba=boost::asio;

#define SERVER_PORT 12345
#define DATA_LEN 0x4000


struct session : public std::enable_shared_from_this<session> …
Run Code Online (Sandbox Code Playgroud)

c++ boost-asio boost-coroutine

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

如何使用vs2013的NMake在cmake中设置v120xp

我使用win7-32​​bit + CMake的 + vs2013的NMAKE .EXE建立exe文件,我需要的exe能够在WinXP跑,我知道该怎么做,与vs2013 IDE(设置平台的工具,以v120xp),但我我没有使用IDE,我只是使用它的NMake.这是我生成项目文件和exe的方法:

build> cmake -G "NMake Makefiles" ..
build> nmake
Run Code Online (Sandbox Code Playgroud)

问题1:在CMakeLists.txt中,如何设置它使用v120xp?

问题2:是否有必要使用v120xp构建所有静态库?或者只是exe?

windows-xp nmake cmake visual-studio-2013

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

cmake使用/ Od禁用优化

CMAKE_BUILD_TYPE是Release,我试过这个来禁用优化:

set(CMAKE_CXX_FLAGS "-Od ${CMAKE_CXX_FLAGS}")
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它显示:

cl : Command line warning D9025 : overriding '/Od' with '/O2'

如何在cmake中设置优化级别?谢谢.

cmake

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

两个4位位字段的总和不超过一个字节-如何解决?

我尝试将库从linux移植到win32,有一个结构定义为:

struct X {
    unsigned int    type : 4;
    unsigned int    tag : 4;
}__attribute__((packed));
Run Code Online (Sandbox Code Playgroud)

大小应为1,我将其更改为:

#pragma pack(push, 1)
struct X {
    unsigned int    type : 4;
    unsigned int    tag : 4;
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)

但是sizeof(X)仍然是4,编码会混乱,如何将大小更改为1?

c++ visual-c++

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

如何使用自定义环境变量“go build -ldflags”

我想在程序启动时打印构建时间,例如:

package main

import "fmt"

var BuildTime string

func main() {
    fmt.Println(BuildTime)
}
Run Code Online (Sandbox Code Playgroud)

我尝试将环境变量设置为当前时间set bt (date),确保echo $bt显示时间。

然后使用 进行构建go build -ldflags "-X main.BuildTime=$bt",但它无法构建并显示某些链接器的用法,例如:

呃

我尝试了一些系统变量,例如 $USER/$PWD/$TERM,例如go build -ldflags "-X main.BuildTime=$USER",一切正常,为什么不工作$bt

我使用的是fish shell,但我也尝试过bash,同样的问题。

environment-variables go

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