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…
。