【发布时间】:2018-03-25 02:54:40
【问题描述】:
我正在使用奇怪的循环模板模式来解决 C++ 中的一个问题。 在某些使用相同方法的情况下,我需要返回子类或基类。
因此方法 dec 将类似于
base& get() {
return base_ref || deriv_ref; //depends on impl
}
虽然我有其他方法,例如
template <typename deriv>
class base {
void run(deriv& d) {//deriv specific method/derived class/}
void run(base& b) { //base specific method// }
}
但是,每当我返回 derived class(重新解释为 base&)时,方法默认为 base 类实现,如下所示。
template<typename d>
struct base {
void run(d& type) {
std::cout << "deriv " << std::endl;
}
void run(base& type) {
std::cout << "base" << std::endl;
}
base& alter(d& der) {
return der;
}
d& no_alt(d& der) {
return der;
}
};
struct deriv : public base<deriv> {
};
int main() {
deriv foo;
base<deriv> bar;
bar.run(foo); //prints deriv
bar.run(bar); //print base
bar.run(bar.alter(foo));//print base (Need this to print deriv)
bar.run(bar.no_alt(foo));//print deriv
}
在这些情况下,如何将方法默认设置为 derived_methods?
此外,我认为编译器应该给出定义不明确的警告(因为它基本上有两种接受相同类型的方法)。
【问题讨论】:
-
我不确定我是否理解您的问题,但据我所知,输出没有错误
-
嘿,我的意思是上述方法是通过引用而不是通过值,现在问题应该有意义了。
标签: c++ templates generics inheritance