相关疑难解决方法(0)

宏有什么好的用途吗?

据我所知,宏在编译器正确看到它之前重新排列程序文本,因此可能导致问题.我几乎没有在C++代码中看到它们,主要是在C.

我所知道的唯一好处是包含警卫(#ifndef).

还有什么需要用宏来完成,不能以更干净的方式实现吗?

c++ macros

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

用现代c ++技术替换c ++宏的连接

我知道最好避免使用c ++中的宏.使用内联函数替换类似函数的宏,并使用constexpr/using来替换const-variable-define宏.但我想知道是否有一种方法可以通过一些现代的c ++技术取代宏连接功能.

例如,如何替换以下宏:

#define GETTER_AND_SETTER(name)     \
   inline void Set##name(int value) \
   {                                \
      m_##name = value;             \
   }
   inline int Get##name() const     \
   {                                \
      return m_##name;              \
   }
Run Code Online (Sandbox Code Playgroud)

然后在一个类中,我可以为很多变量做这个,这使得代码更加干净.

GETTER_AND_SETTER(Variable1)
GETTER_AND_SETTER(Variable2)
GETTER_AND_SETTER(Variable3)
...
Run Code Online (Sandbox Code Playgroud)

我在这里这里检查,但我没有得到答案.伙计们,对此有任何想法吗?谢谢.

编辑:getter/setter的例子只是用来表示想法.请不要专注于他们.:)

c++ c++11

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

将结构/常量保持在单独的标题中

我有一个VECTOR结构,它包含3个整数,i,j和k.我需要在多个头文件中使用此结构.将所有#defines和结构,所有常量移动到标记为"Constants.h"的单独头文件,或者我应该在每个头文件中定义相同的结构(我当前使用它)被认为是不好的做法吗?

c++

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

带#define的常量字符串数组 - objective c

我需要一个常量的字符串数组.使用#define是个好主意?

例如:

#define rows [NSArray arrayWithObjects:  @"NameRowA",@"NameRowB",@"NameRowC", nil]


#define KEY_ROWA [columnas objectAtIndex:0]
#define KEY_ROWB [columnas objectAtIndex:1]
#define KEY_ROWC [columnas objectAtIndex:2]
Run Code Online (Sandbox Code Playgroud)

我需要访问字符串数组和该数组的元素.

我已经读过了,(我不知道是不是真的)用这种方式创建一个新的NSArray,当它被使用时,我想这个数组已经发布了,所以我认为这很好,因为你只使用那部分内存什么时候需要它.

objective-c ios

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

cocos2d-x using_ns_cc

我需要知道C++中Cocos2D-X中这句话的功能是什么:

USING_NS_CC
Run Code Online (Sandbox Code Playgroud)

代码示例:

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include "GameOverScene.h"

USING_NS_CC;

HelloWorld::~HelloWorld()
{
    if (_targets)
    {
        _targets->release();
        _targets = NULL;
    }

    if (_projectiles)
    {
        _projectiles->release();
        _projectiles = NULL;
    }

    // cpp don't need to call super dealloc
    // virtual destructor will do this
}
Run Code Online (Sandbox Code Playgroud)

c++ cocos2d-x c++11 cocos2d-x-3.0

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

为什么#define不好?

可能重复:
C++宏什么时候有用?
为什么#define不好,什么是正确的替代品?

有人告诉我#define很糟糕.好吧,老实说我不明白为什么不好.如果它不好,那么我可以用其他方式做到这一点呢?

#include <iostream>
#define stop() cin.ignore(numeric_limits<streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)

c c++ iostream c-preprocessor

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

为什么malloc使用这种方式?

我正在研究我要求研究团队提供的代码.我试图理解代码,然而,他们以一种奇怪的方式使用了malloc.这里;

在头文件中;

 #define ERROR_OUTPUT stderr
 #define FAILIF(b) {   \
   if (b) {  \
       fprintf(ERROR_OUTPUT, "FAILIF triggered on line %d, file %s. Memory allocated: %lld\n",  \
       __LINE__, __FILE__, totalAllocatedMemory); exit(1); \
   } \
  }
 #define MALLOC(amount) \ 
   ( (amount > 0) ? totalAllocatedMemory += amount, malloc(amount) : NULL)
Run Code Online (Sandbox Code Playgroud)

在cpp文件中;

 double *memRatiosForNNStructs = NULL;
 double *listOfRadii = NULL;
 nRadii = 1;
 FAILIF(NULL == (memRatiosForNNStructs = (double*)MALLOC(nRadii * sizeof(double))));
Run Code Online (Sandbox Code Playgroud)

根据我的理解,他们定义的MALLOC意味着以下内容;

if(amount>0) // which is true; at least in this case
{
   totalAllocatedMemory = …
Run Code Online (Sandbox Code Playgroud)

c++ memory malloc

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