我正在尝试从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?
我需要一个链接节点来保存一些不同的接口类型,所以我用泛型来制作它,但是泛型类型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) 在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) 我正在写一个简单的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,因为在追加一行时调用两次,因为有两列,并且将来可能会有更多列.
有没有更好的方法来追加行?
谢谢.
我在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) 我的服务器基于 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) 我使用win7-32bit + 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?
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中设置优化级别?谢谢.
我尝试将库从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?
我想在程序启动时打印构建时间,例如:
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,同样的问题。