小编bra*_*min的帖子

在Visual Studio中使用64位编译器

我使用的是Visual Studio 2017.在一个项目中(我的目标是x64),我得到错误:C1060,编译器没有堆空间,遗憾的是在那里学习了编译时存在内存限制.

在监视CL.exe时,它确实在达到4GB之前停止.所以看起来CL.exe默认是32位应用程序,如下所示:https://docs.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual- CPP-工具集-上的命令行

阅读本页后,我安装了"通用Windows平台工作负载",希望能够访问64位版本的CL.exe.但是在编译我的项目时没有变化,我在visual studio中看不到选择编译器版本的单个选项.

我假设必须有一个解决方法,能够为一个编译单元使用超过4GB,但我现在找不到它.任何帮助将非常感激.

编辑:我在调试模式下遇到限制.编译在发布模式下运行良好.这是有道理的.

c++ cl visual-studio-2017

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

C/C++ 防止宏内部的宏扩展

让我们考虑一下:

#define PARENTHESIS1 (
#define PARENTHESIS2 )
#define macro_test_0(arg1, arg2) int arg1 arg2
#define macro_test_1(arg1, arg2) macro_test_0(arg1, arg2)

macro_test_0(PARENTHESIS1, PARENTHESIS2 ;) //->works fine
macro_test_1(PARENTHESIS1, PARENTHESIS2 ;) //doesn't work
Run Code Online (Sandbox Code Playgroud)

对于macro_test_1,我有错误消息:“宏参数不匹配”、“为类似函数的调用方法提供的参数太少”、“使用未声明的标识符‘macro_test_0’”。

事情是,对于 Macro_test_0,示例给出:

int ( ) ;
Run Code Online (Sandbox Code Playgroud)

没关系,但是 Macro_test_1 示例给出了(如果我是正确的):

macro_test_0((,) ;)
Run Code Online (Sandbox Code Playgroud)

这显然是错误的。我希望宏的 arg1 和 arg2 防止扩展,以便保留:

macro_test0(PARENTHESIS1, PARENTHESIS2 ;)
Run Code Online (Sandbox Code Playgroud)

我猜这与宏扩展顺序有关,但是有没有办法或技巧来实现这一点?我尝试了几种方法,例如在宏调用期间人工(即无用)参数串联来延迟扩展,但没有成功。

c++ macros

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

C++ 动态向下转换为类模板,模板模板参数是类模板或别名模板

我希望标题有意义。我可能缺少正确表达它的词汇。

嗯,举个例子可能会更清楚。

我的问题是:在以下某些情况下(写在注释中),动态向下转换在运行时返回 0。我想知道这是否是正确的行为(使用 C++11),以及为什么,以及我能做些什么来使其工作。显然,Templated 和 A::A_templated 被视为不同的类,尽管通过使用别名“using”定义为相同的类。对于简单的 typedef 别名,不会出现问题。

template <class T>
class Templated {};

class A {
    public :
    typedef int A_Type;
    template <class T>
    using A_Templated = Templated<T>;
};

class Test_base {
    public :
    Test_base() {}
    virtual void foo()=0;
};

template <class T>
class Test_Type : public Test_base {
    public :
    Test_Type() {}
    void foo() {}
};

template < template <class T> class TT >
class Test_Templated : public Test_base {
    public :
    Test_Templated() {}
    void foo() …
Run Code Online (Sandbox Code Playgroud)

c++ templates dynamic-cast c++11 template-aliases

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