首页 > 解决方案 > 我应该使用 C++ 宏来生成重载函数吗?

问题描述

假设我在课堂上创建了一些函数:

bool isRisingEdge() {
    return current && !last;
}

我还想生成伴随它的这个函数的重载版本。举个例子,假设我需要用两种不同的类型重载它;每次都是相同的两种类型。每个重载首先调用一些函数(比如process()),然后返回我原来的函数。

bool isRisingEdge(Signal signal) {
    process(signal);
    return isRisingEdge();
}

bool isRisingEdge(Button button) {
    process(button);
    return isRisingEdge();
}

我有很多这样的 is...() 函数,我想在我的课堂上重载它们。我可以定义一个宏来帮助我:

#define CREATE_OVERLOADED_FUNCTION(func_, type_) \
type_ func_(Signal signal) { \
    process(signal); \
    return func_(); \
} \
type_ func_(Button button) { \
    process(button); \
    return func_(); \
}

...然后使用这个宏而不是输入重载。

bool isRisingEdge() {
    return current && !last;
}

CREATE_OVERLOADED_FUNCTION(isRisingEdge, bool)

bool isFallingEdge() {
    return !current && last;
}

CREATE_OVERLOADED_FUNCTION(isRisingEdge, bool)

ETC


我的问题是这样的:

我应该将宏用于这样的简单目的,还是手动输入更好?

有没有更好的非宏观解决方案?

C++ 社区回避宏,但不要重复自己的原则也很重要,我不知道哪个“获胜”。

标签: c++macroscoding-style

解决方案


推荐阅读