相关疑难解决方法(0)

使用C宏创建映射到Objective-C消息调用的C风格代码?

我相信我会得到20个人说"你为什么要这样做呢"......但是,我会问我的问题,因为它有点学术性质.

我想用C宏重新定义[ClassName new]为:new(ClassName),我想知道如何做到这一点.我开始时对C宏不太满意(我知道 - 令人尴尬 - 我应该这样) - 而且我绝对不喜欢将它们与我的Objective-C代码混合使用.那么,关于这个问题......

首先,作为预处理器,我可以做一个简单的替换:

#define new(x) [x new]
Run Code Online (Sandbox Code Playgroud)

或者,无论出于何种原因,我是否需要下载到objective-c运行时,并执行更类似于以下的操作:

#define new(x) objc_msgSend(class_createInstance(x, 0), sel_registerName("init"))
Run Code Online (Sandbox Code Playgroud)

做这样的事情有什么不足之处?

这种事情经常被其他人使用,或者,有人会看着它说"你在那里做什么"?(我应该关心)

谢谢

编辑:

事实上,在我发布之后发生了这件事,事实上我之前看到过这种事情 - 在Three20 lib中,他们做了这样的事情:

#define TT_RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
#define TT_INVALIDATE_TIMER(__TIMER) { [__TIMER invalidate]; __TIMER = nil; }

// Release a CoreFoundation object safely.
#define TT_RELEASE_CF_SAFELY(__REF) { if (nil != (__REF)) { CFRelease(__REF); __REF = nil; } }
Run Code Online (Sandbox Code Playgroud)

所以我的问题可能很简单; 这样做有什么不足之处,这是一种相对公认的做法,还是会让我陷入更多困境的事情呢?

c macros objective-c

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

用现代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
查看次数

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

用于设置和清除位的宏

我试着写一些简单的宏来简化设置和清除位的任务,这应该是一个简单的任务,但我似乎无法使它们正常工作.

#define SET_BIT(p,n) ((p) |= (1 << (n)))
#define CLR_BIT(p,n) ((p) &= (~(1) << (n)))
Run Code Online (Sandbox Code Playgroud)

c embedded macros bit-manipulation

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

C++ 中的“minmax.h”是什么?

我一直#include <minmax.h>在我的脚本中使用min()并按max()预期使用。我向某人展示了这个,他们以前从未见过它,说这对他们不起作用,并问我为什么不包括<algorithm>和调用std::min()or std::max()

所以我的问题基本上是,为什么我不是?我在一本关于 C++ 的书中发现了这一点:“C++ 设计模式和衍生品定价”。谷歌搜索"minmax.h",我在最上面的结果中找到了对那本书的引用,所以更让我觉得这是不正常的。

谁能告诉我这是什么?

c++ minmax

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

当长度== 0时,为什么这种练习代码会失败?

嗨,我有这本书带有一个我无法回答的练习题.不,这不是一个功课问题.这是我从一本推荐给我的书中的自学:"计算机系统,程序员的视角"

这是一个问题: 在此输入图像描述

任何帮助表示赞赏!

c

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

宏函数表现得像循环一样

考虑我设法编写的以下代码:

#include <stdio.h>
#define FOR(A, B, C) for(A; B; C++)

int main()
{
    FOR(i=0, i<10, i)
    printf("%i", i);

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

输出是: 0123456789

如果我这样做,FOR(i=5, i<10, i) 那么输出分别是56789

我的问题是合法的吗?它会在不同的情况下导致任何错误吗?它是否像for循环一样工作?

c macros for-loop

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