0
結束了我寫了下面的程序Binder和可變參數模板在分割故障
#include <iostream>
template<typename C, typename Res, typename... Args>
class bind_class_t {
private:
Res (C::*f)(Args...);
C *c;
public:
bind_class_t(Res (C::*f)(Args...), C* c) : f(f), c(c) { }
Res operator() (Args... args) {
return (c->*f)(args...);
}
};
template<typename C, typename Res, typename... Args>
bind_class_t<C, Res, Args...>
bind_class(Res (C::*f)(Args...), C* c) {
return bind_class<C, Res, Args...>(f, c);
}
class test {
public:
int add(int x, int y) {
return x + y;
}
};
int main() {
test t;
// bind_class_t<test, int, int, int> b(&test::add, &t);
bind_class_t<test, int, int, int> b = bind_class(&test::add, &t);
std::cout << b(1, 2) << std::endl;
return 0;
}
用gcc 4.3.3編譯,並得到分割故障。花了一些時間與gdb和這個程序後,我覺得函數和類的地址混淆了,並且不允許調用該類的數據地址。此外,如果我使用註釋行,而不是一切正常。
其他人能否重現此行爲和/或向我解釋發生了什麼問題?
在C++ 0x中,允許執行'return {f,c};'所以你不需要重複長的返回類型。 – 2010-04-23 15:45:43