c++ - 模板转换运算符

标签 c++ templates operator-overloading

我想为两个模板重载转换运算符。

啊啊

#pragma once

#include <B.h>

template <typename T> class A
{
operator B<T>() const;
}

B.h

#pragma once

#include <A.h>

template <typename T> class B
{
operator A<T>() const;
}

我遇到了错误

error C2833: 'operator A' is not a recognized operator or type see
reference to class template instantiation 'B<T>' being compiled

尽管如果仅在一个模板中重载转换运算符,它就可以工作。

最佳答案

你有一个循环依赖问题。您需要有一个前向声明,例如:

嗯:

#pragma once

template <class T> class B;

template <class T> class A {
   operator B<T>() const;
};

#include "B.h"

template <class T>
A<T>::operator B<T>() const {
   foo();
}

B.h:

#pragma once
#include "A.h"

template <class T>
class B {
   operator A<T>() const {
      bar();
   }
};

我假设你使用了 #include "A.h" . A.h 然后包括 B.h.当编译器开始编译 B.h 时,它还没有看到 A.h 的声明,因此编译器不知道如何解释 operator A<T>() const。 ,因为它不知道 A 是一种类型。

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

相关文章:

c++ - 新建/删除运算符重载和基类

kotlin - 如何在 Kotlin 中定义自定义赋值运算符重载?

c++ - MPI 查找位移的不同方法

尝试创建标记 vector 时出现 C++ 错误

c++ - 结构如何继承自身?

c++ - 推导嵌套模板的模板参数失败

c++ - 不匹配 ‘operator-’

c++ - 查看实现不当行为

c++ - 获取 make 项目编译和包含的文件列表

c++模板依赖于文件的输入