小编Ale*_*ler的帖子

如何在提示用户输入时提供可编辑的默认值?

在Perl脚本中,我想提示用户输入并为他提供可编辑的默认值.到目前为止我有这个:

#!/usr/bin/perl

print "what's your name? [John Doe]: ";
$name = <STDIN>;
chomp $name;
if (!$name)
{
    $name = "John Doe";
}
print "hello $name.\n";
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一个解决方案,我可以STDIN在用户开始输入之前使用"John Doe" .所以它实际上是一个可编辑的默认输入.例如,用户可以按退格键3x然后键入"Wayne"以获得"John Wayne"而不是从头开始键入整个字符串"John Wayne".我试图打印到STDIN,但那不起作用.

terminal perl prompt

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

如何为相同类型的typedef提供模板特化?

第三方SDK定义了几个typedef,例如:

typedef unsigned char SDK_BYTE
typedef double SDK_DOUBLE
typedef unsigned char SDK_BOOLEAN
Run Code Online (Sandbox Code Playgroud)

它还定义了一个变体类型SdkVariant:

class SdkVariant
{
public:
    enum SdkType { SdkByte, SdkDouble, SdkBoolean };
    bool toByte(SDK_BYTE&);
    bool toDouble(SDK_DOUBLE&);
    bool toBool(SDK_BOOLEAN&);
    SdkType type();
};
Run Code Online (Sandbox Code Playgroud)

从这样的变量中检索值看起来像这样(假设,我们知道所包含的值的类型):

SdkVariant variant(foobar());
double value;
bool res = variant.toDouble(value);
if (!res)
    diePainfully();
else
    doSomethingWith(value);
Run Code Online (Sandbox Code Playgroud)

这非常冗长,因此我想提供一个可以执行值检索和错误处理的variant_cast-function-class:

// general interface:
template<class T>
class variant_cast
{
public:
    T operator()(const SdkVariant& variant);
};

// template specializations:
template<>
SDK_DOUBLE variant_cast<SDK_DOUBLE>::operator()(const SdkVariant& variant)
{
    SDK_DOUBLE value;
    bool res = variant.toDouble(value);
    if (!res)
        diePainfully(); …
Run Code Online (Sandbox Code Playgroud)

c++ templates typedef c-preprocessor

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

如何在 db2 中将时间戳转换为 ISO 格式的日期?

例如,如果数据库中有一个字段的值为:2010-10-20-12.00.00.000000

如何获得包含20101020.

所以我可以做这样的事情:

SELECT * FROM file WHERE DATE(timestamp) BETWEEN 20101020 AND 20101031
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。DATE()不以 ISO 格式返回。

db2

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

为什么我们需要使用*来修改基本数据类型的值而不是用户定义的结构的值?

我是Go的新手并且在C中有一些经验.现在让我困惑的是为什么,在下面的代码中,我们需要取消引用str来修改值而不是chk.j.

在结构的情况下,这里还发生了什么?

type test struct {
    i int
    j string
}

func main() {
    str := new(string)
    *str = "Need Astrik"
    chk := new(test)
    chk.i = 5
    chk.j = "Confused"
    fmt.Println("printing", chk.i, chk.j, *str)
}
Run Code Online (Sandbox Code Playgroud)

go

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

构建PJSIP:在ubuntu上为Make命令提供错误

我想在ubuntu 13.10中使用pjsip库,并尝试了pjsip.org入门页面中给出的步骤

我尝试使用以下命令序列构建pjsip lib,并且我编辑了config_site.h以#define PJMEDIA_HAS_VIDEO在其中包含该行.在运行这些命令之前,我还安装了video4linux2和ffmpeg

cd pjproject
./configure
make dep
make
Run Code Online (Sandbox Code Playgroud)

我运行最后一个命令后出现以下错误:

make[2]: Entering directory `/home/vk/pjproject/pjsip/build'
make[2]: `../lib/libpjsua-x86_64-unknown-linux-gnu.a' is up to date.
make[2]: Leaving directory `/home/vk/pjproject/pjsip/build'
make -f /home/vk/pjproject/build/rules.mak APP=PJSUA2_LIB app=pjsua2-lib ../lib/libpjsua2-x86_64-unknown-linux-gnu.a
make[2]: Entering directory `/home/vk/pjproject/pjsip/build'
.pjsua2-lib-x86_64-unknown-linux-gnu.depend:1: *** missing separator.  Stop.
make[2]: Leaving directory `/home/vk/pjproject/pjsip/build'
make[1]: *** [libpjsua2-x86_64-unknown-linux-gnu.a] Error 2
make[1]: Leaving directory `/home/vk/pjproject/pjsip/build'
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)

那么有人可以帮我解决这个错误吗?

ubuntu pjsip

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

将FILE句柄重定向到char-buffer

我正在使用第三方库,允许在两种文件格式AB之间进行转换.我想使用这个库加载格式为A的文件并将其转换为格式B,但我只需要在内存中转换的表示.所以我想进行转换而不实际将目标格式的文件保存到磁盘,而是获取unsigned char*缓冲区或类似的东西.不幸的是,只有库的转换功能才具有形式

void saveAsB(A& a, std::FILE *const file);
Run Code Online (Sandbox Code Playgroud)

我能做什么?有没有办法将句柄上执行的写操作重定向到某个缓冲区?

c++ file-io

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

在控制台应用程序中挣扎着一个空的Windows消息队列

在下面(可编译的)示例中,我正在尝试在普通控制台应用程序中侦听Windows消息队列,以便接收有关正在连接/断开的USB设备的通知.我从这里获取了示例代码:在C++非GUI应用程序中检测USB插入/删除

然而,呼吁GetMessagewhile-clause永远不会返回,因为obviuously Windows不发送任何消息给我的队列.我究竟做错了什么?这与UIPI有什么关系吗?

我不经常使用MFC/WinAPI,所以请详细说明你的答案.

#define ANSI
#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT   0x0501

#include <windows.h>
#include <winuser.h>
#include <Dbt.h>

#include <string>
#include <iostream>
#include <stdexcept>

#define HID_CLASSGUID {0x4d1e55b2, 0xf16f, 0x11cf,{ 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}}
#define CLS_NAME "DUMMY_CLASS"
#define HWND_MESSAGE     ((HWND)-3)

LRESULT message_handler(HWND__* hwnd, UINT uint, WPARAM wparam, LPARAM lparam)
{
    switch (uint)
    {
    case WM_NCCREATE: // before window creation
        return true;
        break;

    case WM_CREATE: // the actual creation of the window
    {
        // …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi message-queue

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

彩色图像的直方图均衡使用python opencv给出错误

错误:合并中断言失败(0 <cn && cn <= CV_CN_MAX)

在合并功能中

cv2.merge(channels,img2)
Run Code Online (Sandbox Code Playgroud)

如果参数被替换如下所示:

cv2.merge(img2,channels)
Run Code Online (Sandbox Code Playgroud)

它不会给出错误,但均衡前后的直方图是相同的.我能在这段代码中做些什么.

码:

import cv2,cv
import cv2.cv as cv
import numpy as np
from matplotlib import pyplot as plt

capture = cv.CaptureFromCAM(0)
img = cv.QueryFrame(capture)
img_size = cv.GetSize(img)

width,height = img_size
size = width,height,3
channels = np.zeros(size , np.uint8) 


while (1):
img = cv.QueryFrame(capture)
img = np.asarray(img[:,:])

cv2.imshow("original",img)
hist = cv2.calcHist([img],[2],None,[256],[0,256])

#convert img to YCR_CB
img2 = cv2.cvtColor(img,cv2.COLOR_BGR2YCR_CB)

#split image to Y, CR, CB
cv2.split(img2,channels)

#histogram equalization to Y-MATRIX
cv2.equalizeHist(channels[0],channels[0])

#merge …
Run Code Online (Sandbox Code Playgroud)

python opencv python-2.7

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

在全局变量的初始化/反初始化中使用隐式加载的DLL中的函数

考虑一个使用导入库logging.lib的Windows程序,这样logging.dll将在运行时自动加载/卸载。

另外,请考虑主程序的翻译单元之一,其定义类类型的全局变量如下:

struct InitGuard
{
    InitGuard()
    {
        logging::initialize();
    }

    ~InitGuard()
    {
        logging::deinitialize();
    }
};

InitGuard g_initGuard;
Run Code Online (Sandbox Code Playgroud)

除了更好的方法是InitGuard在函数内实例化这一事实之外main

  • 是否可以确保在调用c'tor时已经加载logging.dllInitGuard
  • 甚至更重要的是,是否可以保证在d'tor 返回之前仍不会卸载logging.dllInitGuard

c++ windows

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