0
template<typename T> class testClass{
    public:
    bool compare(const int& a, const int& b){
        T x;
        ....
    }
    void sort(){
        std::sort( data.begin() ,
                data.end() ,
                boost::bind<bool>(
                &testClass<T>::compare,
                this, _1 , _2 ) );
    }
    std::vector<int> data;
}

のコンパレータとして意図された非静的メンバー関数を持つテンプレートクラスがありstd::sortます。コンパレータはtypename Tパラメータによって異なります。暗黙のポインターがあるので、それへのポインターthisを試みます。boost::bindthis

しかし、どちらboost::bind<bool>(.......)boost::bind(....)コンパイルしません。

上記の例は MSVC 2008 では失敗します (私は英語以外の環境にいるので、英語での正確なメッセージについてはわかりませんが、おそらくどちらかのプロトタイプについて文句を言うと、必要なすべての引数の変換が実行可能になる可能性があります)。

4

1 に答える 1

0

さて、かなり掘り下げた後...実際、問題は上記のスニペットにはありません。

関連する別のメンバー関数の(奇妙な VC++ コンパイル エラー、C2244 ) に似た問題であることが判明しました。呼び出された関数は、compareたまたま上記の質問とまったく同じようにコンパイルに失敗したテンプレート関数でした。最初はそのエラーに気づきませんでした。

コードの一部を から に移動しclass.cppたところ、class.hpp動作するようになりました。

愚かな MSVC のバグであり、私が犯した愚かな間違いです。

于 2013-02-19T05:04:12.583 に答える