我想创建一个可以使用模板参数隐式转换为另一个类的类。这是我想要实现的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
示例正常工作?
答案 0 :(得分:4)
此:
F(b);
需要模板参数演绎。结果,它不会做你想做的事。
尝试显式传递参数模板,如下所示:
F<int>(b);
因为您在()
中提供了class B
运算符。