我的目标是隐藏某些遗留类的一些公共方法,同时允许公共访问其他类。例如,当我有
时struct foo {
void call_me();
void dont_call_me();
};
然后这就像一个魅力:
struct bar : private foo {
using foo::call_me;
};
我希望拥有一些magic
模板,以便magic<foo,&foo::call_me>
“使用”foo::call_me
(当可以进行可变参数时可能更多)。我试过这个
template <typename T,void (T::*mem_fun)()>
struct dont_call_me_foo : private T {
using T::mem_fun;
};
我真的没想到这会起作用,但我对编译器错误感到有些惊讶:
error: declaration of ‘using T::mem_fun’ shadows template parameter
using T::mem_fun;
^~~~~~~
prog.cpp:18:22: note: template parameter ‘mem_fun’ declared here
template <typename T,void (T::*mem_fun)()>
^~~
如果不以某种方式重新实现该方法,是否可以修复dont_call_me_foo
?
优先选择C ++ 11,但如果以后有所帮助,我也会感兴趣。