次のコードは、ライン17によって引き起こされるエラーをコンパイル与える:ダブルブースト::バインド原因コンパイル時エラー
#include <boost/bind.hpp>
#include <boost/function.hpp>
void func()
{}
class A{
public:
template <typename T>
static void foo(T const& arg){}
template <typename T>
void bar(T const& arg){
boost::bind(&A::foo<T>, arg); //OK
boost::function<T> functor1 = boost::bind(func); //OK
boost::function<T> functor2 = boost::bind(&A::foo<T>, arg); //ERROR, LINE 17
}
};
int main()
{
A obj1;
obj1.bar(func);
}
質問はライン17でfunctor2のprotoypeがどうあるべきか、ですか?
私は本当に後押し::機能<のボイド()>を、ブーストを作る方法」であることをfunctor2のプロトタイプを維持したい場合は::バインドは、このような型を返す
コンパイルエラーは次のとおりです。?usr/include/boost/bind/bind.hpp:253: error: invalid initialization of reference of type 'void (&)()' from expression of type 'void (*)()'
何それが意味するのでしょうか?
試行ブースト::関数<空隙(TのCONST&)> functor2 =ブースト::バインド(&A :: FOO、引数)。 –
Lou
それは動作しません。 Tはすでに "void(*)()"であるからです。 –