相关疑难解决方法(0)

如何使用C预处理器连接两次并扩展宏,如"arg ## _ ## MACRO"?

我正在尝试编写一个程序,其中一些函数的名称依赖于某个宏变量的值,宏如下:

#define VARIABLE 3
#define NAME(fun) fun ## _ ## VARIABLE

int NAME(some_function)(int a);
Run Code Online (Sandbox Code Playgroud)

不幸的是,宏NAME()将其转化为

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

而不是

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

所以这显然是错误的方式.幸运的是,VARIABLE的不同可能值的数量很小所以我可以简单地做一个#if VARIABLE == n并单独列出所有情况,但我想知道是否有一个聪明的方法来做到这一点.

c concatenation token c-preprocessor

141
推荐指数
3
解决办法
7万
查看次数

R:深层复制一个函数参数

请考虑以下代码

i = 3
j = i
i = 4 # j != i
Run Code Online (Sandbox Code Playgroud)

但是,我想要的是

i = 3
f <- function(x, j=i) 
    x * j
i = 4
f(4) # 16, but i want it to be 12
Run Code Online (Sandbox Code Playgroud)

如果您想知道我为什么要这样做,您可以考虑这个代码 - 应用程序是一个多减量模型.转换矩阵的对角线是该行中其他减量的总和.我想定义我需要的减量,而不是使用这些减量来计算其他函数.在这种情况下,我只需要uxt01和uxt10,从这些我想生成函数uxt00和uxt11.我想要一些可以扩展到更高维度的东西.

Qxt <- matrix(c(uxt00=function(t=0,x=0) 0,
                uxt01=function(t=0,x=0) 0.05,
                uxt10=function(t=0,x=0) 0.07
                uxt11=function(t=0,x=0) 0), 2, 2, byrow=TRUE)

Qxt.diag <- function(Qxt) {
    ndecrements <- length(Qxt[1,])
    for(index in seq(1, N, N+1)) { # 1, 4
        Qxt[[index]] <- function(t=0, x=0, i=index, N=ndecrements) {
            row <- ceiling(index/ndecr) …
Run Code Online (Sandbox Code Playgroud)

arguments r deep-copy

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

标签 统计

arguments ×1

c ×1

c-preprocessor ×1

concatenation ×1

deep-copy ×1

r ×1

token ×1