试图隐藏一些方法:使用声明阴影模板参数

时间:2018-02-27 21:27:39

标签: c++ templates private using public

我的目标是隐藏某些遗留类的一些公共方法,同时允许公共访问其他类。例如,当我有

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,但如果以后有所帮助,我也会感兴趣。

0 个答案:

没有答案