我想创建一个可以通过模板参数隐式转换为另一个类的类。这是我要实现的MCE:
#include <iostream>
template <typename T>
class A {
T value;
public:
A(T value) {this->value = value;}
T getValue() const {return value;}
};
class B {
int value;
public:
B(int value) {this->value = value;}
operator A<int>() const {return A(value);}
};
template <typename T>
void F(A<T> a) {std::cout << a.getValue() << std::endl;}
void G(A<int> a) {std::cout << a.getValue() << std::endl;}
int main()
{
B b(42);
F(b); // Incorrect
F((A<int>)b); // Correct
G(b); // Also correct
}
F(b)
如果class A
和void F
都是库函数并且无法修改,是否可以使示例工作?
这个:
F(b);
需要模板参数推导。结果,它不会做您想要的。
尝试显式传递参数模板,如下所示:
F<int>(b);
由于您在中提供了()
运算符class B
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句