boost :: bind用于模板类中的非静态成员函数

时间:2013-02-16 02:30:47

标签: c++ templates boost stl bind

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上失败(因为我在非英语环境中我不确定英语中的确切消息,但可能抱怨任何一个原型都可以使所有必要的参数转换成为可能。)< / p>

1 个答案:

答案 0 :(得分:0)

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

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

我将部分代码从class.cpp移至class.hpp,现在可以正常运行。

一个愚蠢的MSVC错误,以及我犯的一个愚蠢的错误。