C++ 不使用静态强制转换显式选择重载方法的技巧

C++ 不使用静态强制转换显式选择重载方法的技巧,c++,C++,这是一个主要关于使代码更容易看的问题 我有一个模板类t,它为每个模板参数t生成一个重载方法overloaded\u method(x*)。此方法上的参数不是直接的模板参数类型,而是针对某些其他专门化模板类,x 因此,给定a类和b类,我们有t,它有重载方法(x*)和重载方法(x*) 之后,我创建了一个实现类impl,它实现了x和x 如果我试图用impl的对象ii调用重载的\u方法(),编译器不知道是否必须选择重载的\u方法(x*)或重载的\u方法(x*),这是可以理解的 我可以通过使用static

这是一个主要关于使代码更容易看的问题

我有一个模板类
t
,它为每个模板参数
t
生成一个重载方法
overloaded\u method(x*)
。此方法上的参数不是直接的模板参数类型,而是针对某些其他专门化模板类,
x

因此,给定
a类
b类
,我们有
t
,它有
重载方法(x*)
重载方法(x*)

之后,我创建了一个实现类
impl
,它实现了
x
x

如果我试图用
impl
的对象
ii
调用
重载的\u方法()
,编译器不知道是否必须选择
重载的\u方法(x*)
重载的\u方法(x*)
,这是可以理解的

我可以通过使用static_cast来帮助编译器。例如,
ti.重载方法(静态强制转换(&ii))

这很好用,但感觉像眼中钉,对我的图书馆的用户来说也不好。我宁愿做类似于
ti.overloaded\u method(&ii)
的事情,这是无效的

是否有任何方法可以明确选择使用哪个重载方法,而不涉及
static\u cast
x

template<typename T>
class x {
public:
    T *v;
};

template<typename...>
class t {
public:
    void overloaded_method();
};

template <typename T, typename... Ts>
class t<T, Ts...>: public t<Ts...> {
public:
    void overloaded_method(x<T> *v) {
    }
    using t<Ts...>::overloaded_method;
};


class a
{
};
class b {
};

class impl: public x<a>,
            public x<b> {
};

int
main (int argc, char *argv[])
{
    t<a, b> ti;
    impl ii;

    ti.overloaded_method(static_cast<x<b> *>(&ii));
    return 0;
}
模板
x类{
公众:
T*v;
};
模板
t类{
公众:
void重载的_方法();
};
模板
t类:公共t类{
公众:
void重载_方法(x*v){
}
使用t::重载_方法;
};
甲级
{
};
b类{
};
类impl:public x,
公共x{
};
int
main(int argc,char*argv[])
{
t-ti;
impl ii;
ti.过载法(静态施法(&ii));
返回0;
}

你的问题陈述很清楚,但有点过于抽象。如果你告诉我更多你正在设计的东西,可能会有一个完全不同的解决方案…@PiotrSkotnicki谢谢,这正是我想要的。我试图在方法中使用一个额外的
模板,但不知道
std::enable\u if\u t…