2014-01-21 68 views
-2

見下面我演示代碼:我可以使用C++在另一個函數中獲得函數信息(返回/參數類型)嗎?

string foo(double a, double b) { 
    //... 
} 

void goo(foo) { 
    // ... do something base on string/double/double of foo 
} 

我想在返回/參數類型的foogoo基地做一些事情,我怎麼能與C++?

一種可能的方法是在模板類對象中綁定foogoo

在我的真實情況下,foogoo不是同時確定的,這意味着您不能將它們綁定在一起。

+0

由於typedef爲'func',返回類型必須爲'string'。我誤解你的問題嗎? –

+0

@JosephMansfield foo可以是任何返回/參數類型,但只有2個輸入參數 – xunzhang

+0

*「在我的真實情況下,foo和goo不是同時確定的」*,這是否意味着'foo'可能會在您編譯後發生變化'goo'?有'decltype',但是它會要求'foo'的定義在'goo'得到遵守時可見。 –

回答

2

假設你通過指針傳遞foo,您可以使用模板:

template<typename R> 
void bar(R (*func)(double, double)) 
{ 
    // Do something with func 
    // example: 
    R variable = func(3.14, 42); 
    std::cout << variable; 
} 

用途:

bar(foo); 
// or 
bar(&foo); 

也可以做一些元編程基於R。請注意,您還可以使用模板作爲函數參數:

template<typename R, typename P1, typename P2> 
void bar(R (*func)(P1, P2)) 
{ 
    // ... 
} 
相關問題