小编Get*_*ree的帖子

每当需要字符串文字时,是否可以使用std :: string :: c_str()?

我猜这个代码中的最后两行应该编译.

#include "rapidjson/document.h"

int main(){
    using namespace rapidjson ;
    using namespace std ;

    Document doc ;
    Value obj(kObjectType) ;
    obj.AddMember("key", "value", doc.GetAllocator()) ; //this compiles fine
    obj.AddMember("key", string("value").c_str(), doc.GetAllocator()) ; //this does not compile!
}
Run Code Online (Sandbox Code Playgroud)

不过,我的猜测是错误的.一行编译而另一行不编译.

AddMember方法有几个变体,如此处所述,但除此之外...为什么返回.c_str()不等同于字符串文字?

我的理解是,无论何时接受字符串文字,你都可以通过string::c_str(),它应该可以工作.

PS:我正在使用VC++ 2010进行编译.

编辑:
缺乏#include <string> 不是问题.它已被包括在内document.h

这是错误:

error C2664: 'rapidjson::GenericValue<Encoding> &rapidjson::GenericValue<Encoding>::AddMember(rapidjson::GenericValue<Encoding> &,rapidjson::GenericValue<Encoding> &,Allocator &)'
: cannot convert parameter 1 from 'const char [4]' to 'rapidjson::GenericValue<Encoding> &'
    with
    [
        Encoding=rapidjson::UTF8<>,
        Allocator=rapidjson::MemoryPoolAllocator<>
    ]
    and …
Run Code Online (Sandbox Code Playgroud)

c++ casting c-strings string-literals rapidjson

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

Win32应用程序是否自动链接到ntdll.dll?

我刚刚意外地发现这样做GetModuleHandle("ntdll.dll")没有事先调用LoadLibrary("ntdll.dll").

这意味着ntdll.dll已在我的进程中加载​​.

是否可以安全地假设ntdll.dll将始终加载到Win32应用程序上,以便LoadLibrary不需要调用?

windows dll winapi loadlibrary ntdll

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

成员初始化部分中的复杂语句?

我有这个:

struct myClass{
    multiset<string,binPred<string> > values ;

    myClass(const char param1, const char param2) : values(less<string>())
    { }
} ;
Run Code Online (Sandbox Code Playgroud)

我需要的初始化values成员有根据的值不同的函子param1param2.不幸的是,决定使用哪个仿函数的逻辑并不那么简单,而且一旦values构造我就无法改变它的相关比较仿函数.

所以...我需要将所有决策逻辑放在成员初始化部分,但我不知道如何使用?:运算符.
是否有可能在那里放置更复杂的陈述?(像switchstaments)

如果没有,有没有办法延迟构造,values所以我可以在构造函数的主体中初始化它?

谢谢.

c++ member-initialization

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

在Visual Studio 2005中编译Win32"hello world"的命令行

以下基本的Win32程序在Dev-C++中编译得很好.

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
    MessageBox(NULL,"Hello, world!","My app", MB_OK ) ;
}
Run Code Online (Sandbox Code Playgroud)

但现在我正在尝试使用Visual Studio 2005编译它.我打开Visual Studio命令提示符并键入:

cl test.cpp
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

test.cpp
test.obj : error LNK2019: unresolved external symbol __imp__MessageBoxA@16 referenced in function _WinMain@16
test.exe : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

我认为问题可能是链接器的路径,但根据此MSDN页面,链接器在环境变量中查找它,该变量LIB已在Visual Studio提示符中设置为:

C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;
C:\Program Files\Microsoft Visual Studio 8\VC\LIB;
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib;
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;
Run Code Online (Sandbox Code Playgroud)

在命令行中编译Win32程序还需要什么?

我正在使用Vista的Visual Studio 2005 SP1更新.

c++ windows winapi visual-studio-2005

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

Babel 插件中的“Visitor.Program.enter()”和“pre()”有什么区别?

这个 Babel 插件:

module.exports = function(){
    return {
        visitor:{   
            Program:{
                enter(){ console.log('Enter') },
                exit(){ console.log('Exit') }
            }
        },
        pre(){ console.log('Pre') },
        post(){ console.log('Post') }
    }
}
Run Code Online (Sandbox Code Playgroud)

为任何 javascript 文件生成以下输出:

Pre
Enter
Exit
Post
Run Code Online (Sandbox Code Playgroud)

pre()Program.enter()在 之前和post()之后调用Program.exit()

如果我想在 AST 遍历的开始/结束时运行一些代码,有什么理由我应该将该代码放在pre/post而不是Program.enter/中Program.exit

有什么区别吗?

visitor-pattern node.js babeljs babel-plugin

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

如何阅读WSH的电子表格?

我需要在WSH下使用JScript从.xls文件中读取一些单元格值.

是否有任何COM对象或任何我可以用来做的事情?

com excel wsh spreadsheet jscript

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

WinApi:消息循环可以被异步过程调用中断吗?

以下代码注册一个低级鼠标钩子来全局监视鼠标事件。
这是我能得到的最简单的工作示例。
用VC++2010编译:cl test.cpp /link /entry:mainCRTStartup /subsystem:windows

#include <windows.h>

HWND label1 ;

//THE HOOK PROCEDURE
LRESULT CALLBACK mouseHookProc(int aCode, WPARAM wParam, LPARAM lParam){
    static int msgCount = 0 ;
    static char str[20] ;
    SetWindowText( label1, itoa(++msgCount, str, 10) ) ;
    return CallNextHookEx(NULL, aCode, wParam, lParam) ;
}

int main(){
    /**///  STANDARD WINDOW CREATION PART //////////////////////////////////////////////////////
    /**/        
    /**/    WNDCLASSEX classStruct = { sizeof(WNDCLASSEX), 0, DefWindowProc, 0, 0, GetModuleHandle(NULL), NULL,
    /**/                            LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_BTNFACE+1), NULL, "winClass", NULL } ;
    /**/    RegisterClassEx(&classStruct) …
Run Code Online (Sandbox Code Playgroud)

c++ winapi asynchronous message-queue mouse-hook

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