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;
}

我有一个带有非静态成员函数的 template-d 类,旨在作为std::sort. 比较器取决于typename T参数。由于它有一个隐式this指针,我尝试指向它boost::bind的指针this

然而既不boost::bind<bool>(.......)boost::bind(....)不会编译。

上面的示例在 MSVC 2008 上失败(因为我在非英语环境中,我不确定英语的确切信息,但可能抱怨任何一个原型都可以使所有必要的参数转换变得可行。)

4

1 回答 1

0

好吧,经过一番挖掘......问题确实不在于上面提供的代码段。

原来是与另一个相关的成员函数中的( Strange VC++ compile error, C2244 )类似的问题。调用 in 的函数compare恰好是一个模板函数,它无法像上述问题中的那样编译。起初我没有注意到那个错误。

我将部分代码从class.cppto移到了class.hpp,现在它可以工作了。

一个愚蠢的 MSVC 错误,也是我犯的一个愚蠢错误。

于 2013-02-19T05:04:12.583 回答