宏替换其参数中的标识符

德沃恩

我需要一个宏,该宏在作为参数传递给它的代码中用一个标识符替换另一个标识符。要解决我的任务,只需定义REPLACE_X_WITH_Y即可使此代码编译:

#define REPLACE_X_WITH_Y(...) __VA_ARGS__ //TODO: replace x with y
int main()
{
    REPLACE_X_WITH_Y(
        int x = 5;
        x = 0;
    );
    return y;
}

但是,最好有一个通用宏REPLACE:

#define REPLACE(x, y, ...) __VA_ARGS__ //TODO: replace x with y
int main()
{
    REPLACE(x, y,
        int x = 5;
        x = 0;
    );
    return y;
}

使用C ++预处理程序可以使用这些宏吗?

我的实际用例是在较旧的编译器上模拟一种特定情况的概念:

#define REQUIRES(...) template<class T_=T, enable_if_t<REPLACE_T_WITH_T_(__VA_ARGS__), int>* = nullptr>

template<typename T> struct S
{
    REQUIRES(is_integral_v<T>) int f(T x) {return 0;}
    REQUIRES(is_floating_point_v<T>) int f(T x) {return 1;}
};
昆汀

我看不到执行这种涉及的操作的方法,但是在您的特定情况下,您不需要它。您需要SFINAE的从属上下文,但是它可以很好地按原样启动您的条件,并将其绑定到您可以控制的从属位:

template <class, bool Value>
struct dependent_bool
: std::integral_constant<bool, Value> { };

#define REQUIRES(...)                                       \
    template<                                               \
        class Require_T = void,                             \
        ::std::enable_if_t<                                 \
            dependent_bool<Require_T, (__VA_ARGS__)>::value,\
            int                                             \
        >* = nullptr                                        \
    >

在Wandbox上实时观看

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

标识符未在宏中定义

来自分类Dev

标识符未在宏中定义

来自分类Dev

Swift中的可选参数标识符

来自分类Dev

用唯一标识符替换数组中的元素

来自分类Dev

带宏的动态标识符

来自分类Dev

标识符列表与C中的参数类型列表

来自分类Dev

标识符列表与C中的参数类型列表

来自分类Dev

如何生成8位数字的唯一标识符以替换python pandas中的现有标识符

来自分类Dev

如何生成8位数字的唯一标识符以替换python pandas中的现有标识符

来自分类Dev

参数化的new()期望“标识符”

来自分类Dev

使用“ if”作为参数标识符

来自分类Dev

使用参数作为标识符?

来自分类Dev

如何在程序宏生成的代码中创建卫生标识符?

来自分类Dev

如何测试宏中的标识符是否以下划线开头?

来自分类Dev

如何访问其标识符随Swift中的响应类型而变化的JSON响应?

来自分类Dev

是否可以从其模板中访问Vue组件的索引或其他唯一标识符?

来自分类Dev

此应用程序的捆绑标识符不匹配其代码签名标识符

来自分类Dev

宏以创建多个相似的标识符进行测试

来自分类Dev

宏名称必须是一个标识符

来自分类Dev

Clojure是否具有标识符宏?

来自分类Dev

具有宏标识符的FreeRTOS静态数组声明

来自分类Dev

使用简单宏C ++的未声明的标识符错误

来自分类Dev

Xcode 7-宏名称必须是标识符

来自分类Dev

标识符和宏有什么区别?

来自分类Dev

用新标识符替换 16 位标识符

来自分类Dev

用唯一标识符替换列表中的重复元素

来自分类Dev

当组标识符靠近PowerShell中的变量时,字符串替换不起作用

来自分类Dev

用唯一标识符替换所有列中的每个唯一值

来自分类Dev

美元+ mly中的标识符

Related 相关文章

热门标签

归档