这是我的代码:
typedef void (*FUNCPT)(void);
void func1();
int main(){
FUNCPT fpt1;
char *s = "func1";
return 0;
}
我可以像这样评估fpt1:
fpt1 = func1;
但是有一些原因我必须使用函数名来评估函数指针,我期望通过这样的东西得到相同的值:
fpt1 = (FUNCPT)s;
我怎么能做到这一点?
答案 0 :(得分:2)
评估函数名称到函数指针的唯一方法是(不使用固定的符号表与自己代码中的名称),使用共享库和dlopen()
,dlsym()
和喜欢Linux / Unix世界以及Windows世界中相应的等价物。
dlopen
dlsym
答案 1 :(得分:1)
我认为没有任何可移植的方法可以做到这一点。我认为你需要为此编写自己的代码。例如,一个查找表,如:
library(shiny)
ui <- fluidPage(
shiny::numericInput(inputId = 'n',label = 'n',value = 2),
shiny::textOutput('nthValue'),
shiny::textOutput('nthValueInv')
)
fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2))
server<-shinyServer(function(input, output, session) {
myReactives <- reactiveValues()
observe( myReactives$currentFib <- fib(as.numeric(input$n)) )
output$nthValue <- renderText({ myReactives$currentFib })
output$nthValueInv <- renderText({ 1 / myReactives$currentFib })
})
shinyApp(ui = ui, server = server)