是否有可能在C ++中推断出模板类型的转换?

时间:2017-11-23 08:28:51

标签: c++ oop templates

我想创建一个可以使用模板参数隐式转换为另一个类的类。这是我想要实现的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示例正常工作?

1 个答案:

答案 0 :(得分:4)

此:

F(b);

需要模板参数演绎。结果,它不会做你想做的事。

尝试显式传递参数模板,如下所示:

F<int>(b);

因为您在()中提供了class B运算符。