以下のコードは、Visual C++2005ではコンパイルされません。
class SomeClass {
public: boost::function<void()> func;
SomeClass(boost::function<void()> &func): func(func) { }
};
void someFunc() {
std::cout << "someFunc" << std::endl;
}
int main() {
SomeClass sc(boost::function<void()>(&someFunc));
sc.func(); // error C2228: left of '.func' must have class/struct/union
return 0;
}
SomeClassコンストラクターの引数を括弧で囲んだり、引数リストの外にboost :: functionオブジェクトを作成したりすると、正常にコンパイルされます。
SomeClass sc((boost::function<void()>(&someFunc)));
// or
boost::function<void()> f(&someFunc);
SomeClass sc(f);
前のコードの問題は何ですか?