它工作得很好,對於普通的香草函數。下面的代碼工作得很好。它打印出究竟什麼是應該:使用Boost獲取成員函數的參數和參數類型? (boost :: function_traits)
int __cdecl(int, char)
2
int,char
#include <boost/type_traits.hpp>
#include <boost/function.hpp>
#include <boost/typeof/std/utility.hpp>
#include <iostream>
using std::cout;
using std::endl;
int foo(int, char) {
return 0;
}
int main() {
typedef BOOST_TYPEOF(foo) foo_type;;
typedef boost::function_traits<foo_type> function_traits;
cout << typeid(foo_type).name() << endl;
cout << function_traits::arity << endl;
cout << typeid(function_traits::arg1_type).name() << ",";
cout << typeid(function_traits::arg2_type).name() << endl;
return 0;
}
那麼,問題是,怎麼能做到這一點,如果foo是類酒吧的成員函數?
struct bar {
int foo(int, char) { return 0; }
};
我嘗試了這些結構的無數組合:BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()BOOST_TYPEOF_REGISTER_TYPE()的boost ::裁判的boost :: remove_pointer的boost ::綁定的boost ::的mem_fn
等等,等等......沒有喜悅。
相信我,我嘗試過使用BOOST_TYPEOF(&bar :: foo)的每個變體,我可以想到。我希望有人可以發佈一個小型的工作計劃,就像問題中的問題一樣。 – 2010-01-29 20:56:08
大多數人都這樣做。自1971年以來,我一直是一名專業程序員,並且我已經瞭解到,拼寫出來不會有什麼傷害。謝謝你的幫助。 – 2010-01-29 22:26:21
@Jive,沒問題,我什麼也沒有得到它 - 儘管這讓我有意嘗試再次完成C++反射庫的事情;> – 2010-01-29 22:27:52