c++ - 类模板中的转换运算符

标签 c++ templates type-conversion implicit-conversion conversion-operator

我有两个类模板TemplateA<T>TemplateB<T> 。现在,我想在 TemplateB<T> 中定义一个转换运算符为了允许从 TemplateB<T> 进行隐式类型转换至TemplateA<T> 。但是,以下代码会产生编译错误:

struct ClassA {};

template<typename T>
struct TemplateA {
  T val;
};

template<typename T>
struct TemplateB {
  T val;

  template<typename ValT>
  operator TemplateA() const {
    TemplateA<ValT> a;
    a.val = val;
    return a;
  }
};

int main() {
  TemplateB<ClassA> b;
  TemplateA<ClassA> a = b;
  return 0;
}

错误:

main.cpp:13:12: error: expected type-specifier before 'TemplateA'
   operator TemplateA() const {
            ^

最佳答案

I want to define a conversion operator in TemplateB<T> to allow implicit type conversions from TemplateB<T> to TemplateA<T>

这不需要转换函数模板。一个简单的转换函数就可以了:

operator TemplateA<T>() const {
    TemplateA<T> a;
    a.val = val;
    return a;
}

仅当您想要允许从 TemplateB<Foo> 进行转换时才需要模板至TemplateA<Bar> .

关于c++ - 类模板中的转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32277747/

相关文章:

php调用c++套接字函数导致权限被拒绝错误

c++ - 如何以编程方式生成相同值的std::index_sequence,而不必为每个元素进行递归模板实例化

c++ - 模板整数参数构造函数

date - 将 “Fri Apr 29 06:01:46 EDT 2016”转换为HIVE中的日期格式?

c++ - 检查输入是否是正确的整数

c++ - 为什么 std::swap 可以正确交换自定义对象?

c++ - 在 C++ 模板中,如何构造未知类型 (T) 的元素?

c++ - 将对象指针转换为双 void 指针(指向 void 指针的指针)

c++ - 为什么这个 Github 项目将字符串转换为 bool 值?

C++,如何返回基类,然后将其转换为派生类?