c++ - 是否可以在 C++ 中推断类型转换为模板化类型?

标签 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
}

如果 class Avoid F 都是库函数并且不能修改了吗?

最佳答案

这个:

F(b);

需要模板参数演绎。因此,它不会执行您想要的操作。

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

F<int>(b);

由于您在 B 类 中提供了一个 () 运算符。

关于c++ - 是否可以在 C++ 中推断类型转换为模板化类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47450772/

相关文章:

c++ - 绑定(bind)一个 odeint 变量

c++ - 访问各种类型的可变参数模板

c++ - ImpersonateLoggedOnUser 无法在 Windows 服务中工作

ruby - 使用 ruby​​ 中的类方法跨对象共享数据库连接?

java - 从项目中删除静态

c++ - C++中是否存在真正的静态多态性?

C++ 跳过一维数组中的元素

c++ - 我如何在类中创建一个返回值是该类对象类型的成员函数?

C++ 模板编程问题预期 `;' 在 ‘it’ 之前?

c++ - 为什么libstdc++-v3中declval的实现看起来那么复杂?