小编Jas*_*son的帖子

反正我是否可以制作模板<typename T>接受多个值?

我编写了这段代码,它目前可以接受一个void回调并将一个值传递给它.但是,有什么办法可以让用户设置多个args吗?也许像Callback Caller这样的东西; 而不是定义多个类型名称而不是回调?我能以某种方式将这一切都整合到一个类型名称中吗?

例如,这是我的课程

template <typename T>
class Callback
{
private:
    std::vector<std::function <void (T)>> func;
public:
    virtual void operator += (std::function<void (T)> _func)
    {
        func.push_back(_func);
    }

};
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

Callback<int> Test;
Run Code Online (Sandbox Code Playgroud)

如果我只想将一个参数传递给我的函数,它的工作正常.但是,是否可以使用户能够定义多个值,而不必使用多个类型名称?

Callback< <(int, int, int)> > Test;
Run Code Online (Sandbox Code Playgroud)

类似的东西?

c++ templates c++11

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

MySQL选择列数最多的表?

select t.table_name from information_schema.tables t
left join information_schema.columns c
on c.table_name = t.table_name
and c.table_schema = t.table_schema
where t.table_schema = 'test'
and count(c.column_name) = max(count(c.column_name))
Run Code Online (Sandbox Code Playgroud)

我试图从数据库"test"中选择具有最高列数的表.但是,我无法做到这一点.我也尝试选择count(c.column_name),但不是返回每个表的列数,而是返回最大列数.

如何选择列数最多的表?

mysql

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

在汇编程序中派生优化的strlen?

以下代码能够确定DWORD的一个或多个字节是否设置为0.

mov eax, value
mov edx, 07EFEFEFFh
add edx, eax
xor eax, 0FFFFFFFFh
xor eax, edx
and eax, 081010100h
Run Code Online (Sandbox Code Playgroud)

例如,如果我们输入34323331h,则eax = 0但是如果输入1字节设置为00的内容,例如34003231h,则eax!= 0

我知道这段代码的作用,但我不明白它是如何做到的.这在数学上如何工作?有人可以用比特向我解释这个过程以及它是如何导出的吗?

它应该相对简单,但我看不到它

assembly

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

Python递归,为什么我的函数不起作用?

我正在尝试编写一个Python 3递归函数,它将告诉我整数是否在嵌套列表中.True如果它在列表中找到它,并且False如果它没有在列表中找到,我不确定如何使代码返回.当我打印for循环的结果时,我得到了一堆

false
false
false
false
true
false
false
false
Run Code Online (Sandbox Code Playgroud)

但是,它返回False,因为最后一次调用是假的,即使我希望它返回true.我怎样才能解决这个问题?

这是我的代码:

def nestedListContains(NL, target):    
    if( isinstance(NL, int) ):
        return NL    

    for i in range(0, len(NL)):
       return ( nestedListContains(NL[i], target) == target )

    return False
Run Code Online (Sandbox Code Playgroud)

这就是我如何称呼它

print(nestedListContains([[3], [4,5,7], [[[8]]]], 8))
Run Code Online (Sandbox Code Playgroud)

编辑:这似乎对我有用,但似乎相当贫民窟:

def nestedListContains(NL, target):    
    if( isinstance(NL, int) ):
        if( NL == target ):
            return 1
        return 0

    x = 0

    for n in NL:
        x += nestedListContains(n, target) == 1        

    return x != 0
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

C/C++检查是否在unsigned int中设置了第31位

我正在尝试检查并查看是否在unsigned int中设置了一个位.我不知道我怎么做到这一点,但我认为它会是这样的.我正在尝试用C++编写cdq指令(但是一个函数)

这就是我所拥有的

unsigned int cdq(unsigned int eax)
{
     unsigned int edx = 0;

     if( (eax >> 31) & 1 ) { edx = 0xFFFFFFFF; }
     return edx
}
Run Code Online (Sandbox Code Playgroud)

当我使用具有以下值的函数时:

cdq(0x12345678)第31位设置为(1)所以它应该返回(unsigned int)-1 cdq(0x01)bit 31没有设置(0)所以它应该返回0

问题是它总是返回0,我不知道为什么

c c++ bits

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

Perl解释器:将'\n'转换为换行符?

我在perl中有一个程序,它从控制台传递一个字符串.如果我从控制台传递字符串\ r \n,它确实为它应该从字面上店\ r \n到控制台的参数,因为它是像这样创建的:

my $str = '\r\n';
Run Code Online (Sandbox Code Playgroud)

如何将$ str变成CRLF?例如; 我该怎么做

my $str = '\r\n';
Run Code Online (Sandbox Code Playgroud)

my $str = "\r\n"; #<--- perl converts \r\n into a carriage return & line feed.  
Run Code Online (Sandbox Code Playgroud)

如何强制perl将从控制台传递的字符串转换为CRLF?

如果我不够清楚,让我举个例子:

my ($arg1, $arg2) = @ARGV;
print $arg1 . $arg2;
Run Code Online (Sandbox Code Playgroud)

假设$arg1已通过'Hello\r\n'$arg2通过'World!',它将Hello\r\nWorld!在我希望打印时打印Hello(newline)World!

perl

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

在C++中不再需要清理代码吗?

我正在阅读一篇由于RAII之类的文章,你不再需要清理你的代码了.

促成这项研究的是我目前正在编写需要清理的东西才能退出该功能.

例如,我创建了一个文件,并映射了一个文件的视图.

通常,我只是使用gotodo {break;} while(false);退出.但是,C++ 11不再需要它吗?

不过了

if( fail ) {
        UnmapViewOfFile(lpMapView);
        CloseHandle(hFileMap);
        CloseHandle(hFile);
}
Run Code Online (Sandbox Code Playgroud)

每几行代码?

一旦函数退出,编译器是否会自动将其包装起来?它似乎很难相信它实际上清理了文章所说的功能调用.(我可能会以某种方式误解它.)更可能的是,它只是通过从C++库调用它们的解构函数来清理创建的类库.

编辑:文章 - 来自维基百科:

这不一定表明它清理这些函数调用,但它确实意味着它为C++库函数的对象(如FILE *,fopen等对象)

它也适用于WinAPI吗?

c++ c++11

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

Java 类加载器无法在 java.lang.Class 的类上调用 newInstance()

我正在尝试从字节流编写类加载器,但出现此错误。我已经阅读了文档,但我很困惑,因为这不应该发生。这是我要加载的内容:

class LoadedClass {
    public void out(String msg) {
        System.out.println(msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

它存储在一个字节数组中

这是我的类加载器代码:

package byteclassloader;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

class PrintClass extends ClassLoader {
    private String LoadedClass = "cafebabe00000033001e0a0005001309001400150a001600170700180700190100063c696e69743e010003282956010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301000d4c4c6f61646564436c6173733b0100036f7574010015284c6a6176612f6c616e672f537472696e673b29560100036d73670100124c6a6176612f6c616e672f537472696e673b01000a536f7572636546696c650100104c6f61646564436c6173732e6a6176610c0006000707001a0c000d001b07001c0c001d000e01000b4c6f61646564436c6173730100106a6176612f6c616e672f4f626a6563740100106a6176612f6c616e672f53797374656d0100154c6a6176612f696f2f5072696e7453747265616d3b0100136a6176612f696f2f5072696e7453747265616d0100077072696e746c6e002000040005000000000002000000060007000100080000002f00010001000000052ab70001b100000002000900000006000100000001000a0000000c000100000005000b000c00000001000d000e00010008000000400002000200000008b200022bb60003b10000000200090000000a00020000000300070004000a00000016000200000008000b000c000000000008000f0010000100010011000000020012";
    private String name = "LoadedClass";

    public Class findClass() {
        byte[] ba = hexStringToByteArray(LoadedClass);
        return defineClass(name, ba, 0, ba.length);
    }

    private static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte data[] = new byte[len / 2];

        for( int i = 0; i < len; i+= 2 ) {
            data[i / …
Run Code Online (Sandbox Code Playgroud)

java classloader

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

挂钩KiUserExceptionDispatcher-无法在任何地方找到typedef?

我正在写一个类似于犰狳的文件保护器.因此,我想实施某种"纳米材料"用于反倾销保护.

然而,我决定挂钩,而不是打开我自己的过程KiUserExceptionDispatcher.

问题是我不知道传递给什么,KiUserExceptionDispatcher也不确定在我确定异常类型是STATUS_BREAKPOINT异常之后如何继续.

我试过搜索谷歌,但无济于事.我找到的只是结果KiDispatchException,它挂在rootkit中.

有人可以给我一个这个函数的typedef,并告诉我在确定它确实是一个STATUS_BREAKPOINT例外后我会做什么继续?NtContinue修改EIP上下文后我会打电话吗?

或者如果这不像我想的那么简单,我应该坚持犰狳风格吗?调试我自己的进程?

谢谢.

c++ winapi protector

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

Haskell将Num传递给Int

我在Haskell中编写代码就像take一样,除了它从列表的末尾获取元素.

snatch :: (Num a, Ord a) => a -> [b] -> [b]
snatch n _
     | n <= 0 = []
snatch _ [] = []
snatch n x = reverse (take n (reverse x))
Run Code Online (Sandbox Code Playgroud)

问题出在这条线上,

snatch n x = reverse (take n (reverse x))
Run Code Online (Sandbox Code Playgroud)

它基本上表明,对于取n,n必须是Int.但是,a是Num类型.如果我将函数的定义更改为this,

snatch :: Int -> [b] -> [b]
Run Code Online (Sandbox Code Playgroud)

然后它工作正常.我试过阅读文档和搜索互联网.但我找不到原因.Int显然是一类Num.那不应该这样吗?为什么不起作用?

haskell

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

Haskell,传递一个函数来过滤一行?

我想从Haskell的列表中过滤掉不能被3整除的所有内容,这在技术上是我想要做的

filter (`mod` 3) [1..100]
Run Code Online (Sandbox Code Playgroud)

问题是,mod x 3不会返回布尔值.有没有办法在一行中做到这一点?还是我被迫写另一个返回布尔值的函数?我已经阅读了关于curried函数的内容,但我不确定它是否可以这样做,因为如果我使用(==)ab而a是一个函数,它就不会有效.

haskell

0
推荐指数
3
解决办法
250
查看次数

为什么在赋值运算符之后在此代码中调用复制构造函数?

如果我修改赋值opreator以便它返回一个对象A而不是对对象A的引用,那么就会发生一些有趣的事情.

每当调用赋值运算符时,都会在之后调用复制构造函数.为什么是这样?

#include <iostream>
using namespace std;

class A {
private:
    static int id;
    int token;
public:
    A() { token = id++; cout << token << " ctor called\n";}
    A(const A& a) {token = id++; cout << token << " copy ctor called\n"; }
    A /*&*/operator=(const A &rhs) { cout << token << " assignment operator called\n"; return *this; }
};

int A::id = 0;

A test() {
    return A();
}

int main() {
    A a;
    cout << "STARTING\n";
    A …
Run Code Online (Sandbox Code Playgroud)

c++

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

为什么C++将此值乘以4?

  • pDosHeader 加载到 ECX
  • pDosHeader->f_lfanew加载到EAX(值,而不是指针)

    pNtHeaders = (PIMAGE_NT_HEADERS)((DWORD)pDosHeader + (DWORD)pDosHeader->e_lfanew);
    
    Run Code Online (Sandbox Code Playgroud)

上面的代码ades ECX + EAX并得到了我想要的结果......但是如果我决定在x64上编译一些东西,那么显然是把它指向DWORD的坏习惯了

  1. pNtHeaders = (PIMAGE_NT_HEADERS)( (PDWORD)pDosHeader + (DWORD)pDosHeader->e_lfanew );
  2. pNtHeaders = (PIMAGE_NT_HEADERS)( (PDWORD)pDosHeader + pDosHeader->e_lfanew );

上面的代码添加ECX + EAX * 4并得到了我不想要的结果.对于1和2.

我的问题是为什么?为什么C++会像这样编译我的代码?当我将dos标头转换为指针时,为什么它将e_lfanew乘以4?

它是否假设我想让我的指针指向下一个元素x次?因此将它乘以4以便我可以到e_lfanew(th)元素而不是添加e_lfanew?它可能会.

那我该怎么办?以C++方式编译此代码的正确方法是什么,以便在不使用坏习惯的情况下获得所需的结果?

我不想要的e_lfanewth元素pDosHeader.我只是希望它添加e_lfanewpDosHeader.

c++

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

标签 统计

c++ ×6

c++11 ×2

haskell ×2

assembly ×1

bits ×1

c ×1

classloader ×1

java ×1

mysql ×1

perl ×1

protector ×1

python ×1

python-3.x ×1

templates ×1

winapi ×1