我想创建一个类,它可以隐式转换为另一个带有模板参数的类。这是我想要实现的 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
}
如果 class A
和 void F
都是库函数并且不能修改了吗?
最佳答案
这个:
F(b);
需要模板参数演绎。因此,它不会执行您想要的操作。
尝试显式传递参数模板,如下所示:
F<int>(b);
由于您在 B 类
中提供了一个 ()
运算符。
关于c++ - 是否可以在 C++ 中推断类型转换为模板化类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47450772/