在C ++中可以推断类型转换为模板类型吗?

丹尼斯·舍雷梅(Denis Sheremet)

我想创建一个可以通过模板参数隐式转换为另一个类的类。这是我要实现的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 Avoid F都是库函数并且无法修改,是否可以使示例工作

萨马拉斯

这个:

F(b);

需要模板参数推导结果,它不会做您想要的。

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

F<int>(b);

由于您在中提供了()运算符class B

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++模板可以推断返回类型吗?

可以指定C ++ 20模板化的lambda来推断嵌套在参数中的类型吗?

在 C# 中,您可以将对象类型向上转换为通用“对象”的集合类型吗?

c ++模板参数类型推断

Lambda的C ++模板类型推断

如何推断C ++ 11中的模板参数类型?

C ++自动推断模板成员指针的类型

如何让C ++从Lambda推断模板类型参数?

我可以在 C# 中将泛型类型转换为 Dictionary<,> 吗?

我可以添加自己的类型转换运算符以将C ++对象转换为目标C吗?

在C ++中,您可以像比较类型一样比较模板吗?

c ++ 17中的非类型模板参数可以是decltype(auto)吗?

从成员类型推断类型的C ++函数模板?

是否可以将使用占位符为推断的类类型指定类型的非类型模板参数传递给C ++ 2a中的另一个模板?

有人可以解释C中的以下类型转换吗?

我可以像在Java中那样在c ++中进行类型转换/促销吗?

可以推断模板函数中的参数类型吗?

可以安全引用具有与模板不兼容的模板参数的C ++模板类型吗?

变量模板可以推断类型吗?

C ++如何在模板中推断Callable的类型(参数列表和返回值)

C ++中的类型转换

C ++中的类型转换

c 中的类型转换

C ++中强制类型推断的示例

Java中的类型推断(按C#)

C#中的类型推断规则?

C#中的泛型类型推断

构造函数中的C ++自动类型推断

C ++模板可以(仅)匹配一种类型或单个其他类型的列表吗?