我不理解这里发生了什么。我有一个包含字段a
的类Base
。现在我创建了一个扩展了Base的Derived
类。我还有一个模板函数,通过传递指向成员指针的模板参数来打印我们想要的字段。
#include <iostream>
class Base {
public:
Base(double a):a{a} {}
double a;
};
class Derived : public Base {
public:
Derived(double a) : Base(a) {}
};
template<double (Derived::*p)>
void print(Derived d) {
std::cout << d.*p;
}
int main() {
Derived d {10.0};
print<&Derived::a>(d);
}
问题在于它不起作用,但如果我只使用基类:
template<double (Base::*p)>
void print(Base b) {
std::cout << b.*p;
}
int main() {
Base b {10.0};
print<&Base::a>(b);
}
它按预期工作并打印出 10.0
。我如何让它与子类一起工作?
编译器提示:
test.cpp:15:6: note: template argument deduction/substitution failed:
test.cpp:21:23: error: could not convert template argument ‘&Base::a’ from ‘double Base::*’ to ‘double Derived::*’
print<&Derived::a>(d);
Derived
时,您会得到什么错误?错误通常已经包含了有关错误的良好提示。 - 463035818_is_not_a_number