プレーンなバニラ関数の場合、問題なく動作します。以下のコードは問題なく動作します。必要なものだけを出力します:
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 がクラス bar のメンバー関数である場合、どうすればこれを行うことができるかということです。
struct bar {
int foo(int, char) { return 0; }
};
これらの構成要素の無数の組み合わせを試しました: BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() BOOST_TYPEOF_REGISTER_TYPE() boost::ref boost::remove_pointer boost::bind boost::mem_fn
などなど... 喜びはありません。